← 최신 논문
💻 컴퓨터 과학

Directed Symbolic Execution for Path Feasibility Analysis]{Directed Symbolic Execution for Path Feasibility Analysis in Software Security Testing

본 논문은 자동화된 심볼화와 루프 반복 제한을 통해 프로시저 간 경로 타당성을 효율적으로 검증함으로써 정적 보안 분석을 강화하는 방향성 심볼릭 실행 방법을 제시하며, 이를 통해 실제 벤치마크에서 재현율을 유지하면서도 정밀도를 크게 향상시킨다.

원저자: Hovhannes Movsisyan, Hripsime Hovhannisyan, Tigran Avagyan, Hayk Aslanyan

게시일 2026-10-22
📖 4 분 읽기☕ 가벼운 읽기

원저자: Hovhannes Movsisyan, Hripsime Hovhannisyan, Tigran Avagyan, Hayk Aslanyan

원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. ✨ 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

소프트웨어 보안은 거대한 대도시의 모든 교량과 터널이 지진을 견딜 수 있는지 확인하려는 도시 계획가처럼, 숨겨진 결함과의 끊임없는 싸움입니다. 이를 위해 엔지니어들은 프로그램을 실제로 실행하지 않고도 코드를 스캔하여 프로그램이 취할 수 있는 모든 가능한 경로를 그려내는 자동화된 도구를 사용합니다. 이 지도들은 '제어 흐름 그래프(control flow graphs)'라고 불리며, 프로그램이 한 명령에서 다른 명령으로 어떻게 점프하는지를 보여주는 매우 상세한 정보를 담고 있습니다. 그러나 이러한 지도들은 종종 지나치게 철저하여, 이론적으로는 가능해 보이지만 실제 세계에서는 물리적으로 이동이 불가능한 경로까지도 강조하곤 합니다. 이는 가짜 경보의 홍수를 일으켜, 인간 전문가들이 기계 속의 유령을 조사하는 데 시간을 낭비하게 만듭니다. 따라서 과제는, 방대한 가능성의 양에 길을 잃지 않으면서도, 단순히 이론적으로만 가능한 경로와 실제로 실행 가능한 경로를 빠르게 구별할 수 있는 시스템을 구축하는 것입니다.

러시아-아르메니아 대학교의 연구진은 '방향성 심볼릭 실행(directed symbolic execution)'이라는 기술을 사용하여 이 문제를 해결하는 새로운 방법을 개발했습니다. 특정 경로가 복잡한 도시를 통과하는 데 존재하는지 확인하려는 여행자를 상상해 보십시오. 표준적인 접근 방식은 탐험가들을 보내 모든 거리를 걸으며 그곳이 어디로 이어지는지 확인하는 것인데, 이는 시간이 너무 오래 걸리고 팀을 압도할 것입니다. 대신, 연구진의 방법은 가이드 투어처럼 작동합니다. 이 방법은 보안 스캐너가 보고한 특정 경로를 가져와서, 목적지로 이어지지 않는 다른 모든 거리는 무시하고 오직 그 경로만을 따라가도록 가상 탐험가를 안내합니다. 이러한 '방향성' 접근 방식은 시스템이 무관한 우회로에 에너지를 낭비하지 않고도 보고된 위험이 실제인지 확인할 수 있게 해줍니다.

이 작업의 핵심은 시스템이 미지의 상태를 처리하는 방식에 있습니다. 실제 소프트웨어에서 프로그램은 아직 설정되지 않은 데이터를 다루거나, 내부 코드가 숨겨진 외부 라이브러리의 함수를 호출하는 경우가 많습니다. 전통적인 탐험가는 이러한 공백에 직면했을 때 멈춰 서거나 포기할 수 있습니다. 그러나 연구진의 시스템은 이러한 미지의 요소들을 유연한 변수로 취급하도록 설계되었습니다. 만약 프로그램이 아직 채워지지 않은 메모리 위치를 읽는다면, 시스템은 여기에 심볼릭 값을 할당하여 해당 값이 가질 수 있는 모든 가능한 결과를 탐색할 수 있게 합니다. 이는 외부 함수의 결과나, 상황에 따라 다른 곳을 가리킬 수 있는 동적 주소 역할을 하는 복잡한 포인터 인자(pointer arguments)에 대해서도 동일하게 적용됩니다. 이러한 빈틈들을 구체적인 추측 대신 가능성들로 자동 채움으로써, 시스템은 전체 그림이 보이지 않는 상황에서도 코드를 통한 경로를 추적할 수 있습니다.

소프트웨어를 탐색할 때 마주치는 또 다른 큰 장애물은 반복되는 코드 섹션인 루프(loop)입니다. 실제 프로그램에서 루프는 몇 번 또는 수백만 번 실행될 수 있으며, 심볼릭 분석에서는 탐험가를 무한 루프에 빠뜨릴 수 있습니다. 연구진은 루프를 따르는 횟수에 제한을 두어 강제로 종료하게 함으로써 이를 처리하는 전략을 도입했습니다. 이것은 무작위적인 차단이 아닙니다. 시스템은 해당 반복 과정 동안 발생한 일을 신중하게 기록한 다음, 루프가 자연스럽게 끝나는 지점으로 점프합니다. 이를 통해 분석은 반복적인 구간을 지나 계속 진행될 수 있으며, 도구가 조사 중인 경로의 끝에 도달할 수 있도록 보장합니다.

연구진은 이 방법을 테스트하기 위해 실제 소프트웨어와 '줄리엣 스위트(Juliet suite)'라고 알려진 표준 테스트 케이스 모음에 적용했습니다. 먼저, 그들은 GNU Coreutils(리눅스 운영 체제의 핵심 도구 세트)에서 추출한 경로들을 대상으로 시스템을 검증했습니다. 시스템은 이 실세계 경로들의 95.3%가 실제로 실행 가능하다는 것을 성공적으로 검증하여, 복잡하게 얽힌 코드를 처리할 수 있음을 증명했습니다. 그 후, 연구진은 이 방법을 기존 보안 도구인 MLH와 통합했습니다. 이 기능이 추가되기 전, 해당 도구는 수천 건의 보고 중 666건의 가짜 경보를 발생시켰습니다. 새로운 경로 실행 가능성 분석을 적용한 후, 이러한 가짜 경보들은 완전히 사라졌으며, 동시에 도구는 이전에 발견했던 모든 실제 취약점을 그대로 잡아냈습니다. 이는 테스트된 부분 집합에서 보안 검사의 정밀도가 실제 버그를 찾는 능력의 손실 없이 56.6%에서 100%로 급증했음을 의미합니다.

또한 연구진은 유사한 작업을 수행하도록 설계된 전문 도구인 KLEEF와 자신들의 접근 방식을 비교했습니다. Infer와 Clang Static Analyzer라는 두 가지 주요 보안 스캐너가 생성한 보고서에 대해 테스트했을 때, 결과는 극명했습니다. KLEEF는 대부분의 실제 양성(true positive) 보고를 검증하는 데 큰 어려움을 겪었으며, 이로 인해 성능 점수가 급락했습니다. 반면, 새로운 방법은 기존 스캐너의 성능을 유지하거나 약간 향상시켰습니다. 이 방법은 Infer 도구가 보고한 모든 실제 취약점을 성공적으로 검증했으며, Clang 보고서의 대부분을 처리해 냄으로써 산업 수준의 코드를 다룰 만큼 견고하다는 것을 입증했습니다.

이러한 결과는 방향성 접근 방식이 소프트웨어 보안 테스트의 노이즈를 제거하는 실질적인 방법을 제공한다는 것을 시사합니다. 중요한 경로에만 집중하고 메모리와 외부 함수의 복잡성을 자동으로 처리함으로써, 이 방법은 인간의 시간을 낭비하게 만드는 불가능한 시나리오를 걸러냅니다. 비록 시스템이 진행을 위해 루프 반복 횟수를 제한하는 계산된 절충안을 사용하지만, 결과는 이것이 실제 위험을 놓치는 대가로 이루어지는 것이 아님을 보여줍니다. 이 연구는 자동화된 보안 도구를 더욱 신뢰할 수 있게 만들어, 경고가 울렸을 때 그것이 조사할 가치가 있는 실제 위협임을 보장하는 명확한 길을 제시합니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →