ARQ: Agentic CodeQL Query Refinement for C/C++ Vulnerability Detection
ARQ는 레이블이 지정된 데이터셋 없이도 합성된 프로그램과 LLM으로부터 얻은 실행 기반 증거를 사용하여 C/C++ CodeQL 쿼리를 자동으로 정교화함으로써 오탐률과 미탐률을 크게 줄이고, 최대 119.8% 더 많은 진양성 탐지를 달성하며 공식 저장소의 고질적인 문제들을 해결하는 에이전트 기반 프레임워크입니다.
원본 논문은 CC0 1.0 (http://creativecommons.org/publicdomain/zero/1.0/)에 따라 공공 도메인에 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
컴퓨터, 휴대폰, 자동차를 구동하는 소프트웨어는 종종 C나 C++ 같은 언어로 구축됩니다. 이러한 도구들은 프로그래머에게 기기가 메모리를 사용하는 방식에 대해 정밀한 제어권을 부여하지만, 그 동일한 힘은 실수하기 매우 쉽게 만듭니다. 프로그램이 메모리를 처리하는 방식에서 발생하는 작은 실수는 공격자가 시스템을 중단시키거나 데이터를 훔칠 수 있는 문을 열어줄 수 있습니다. 이러한 오류가 해를 끼치기 전에 잡아내기 위해, 보안 전문가들은 코드를 읽고 위험한 패턴을 찾는 자동 스캐너를 사용합니다. 이 스캐너들은 인간이 작성한 일련의 규칙에 의존하며, 이 규칙들은 취약한 코드 조각이 정확히 어떤 모습인지 스캐너에게 알려줍니다. 만약 규칙이 너무 엄격하면 스캐너가 실제 위험을 놓치게 되고, 너무 느슨하면 존재하지 않는 문제에 대해 경고를 울려 시간과 신뢰를 낭비하게 만듭니다.
수년 동안 이러한 규칙을 개선하는 것은 느리고 수동적인 작업이었습니다. 전문가들은 코드를 읽고, 스캐너가 어디에서 실패할지 추측하고, 규칙을 직접 다시 작성해야 했습니다. 이 과정은 규칙이 완벽해야 하고 스캔하는 코드가 방대하고 복잡하기 때문에 어렵습니다. ARQ라고 불리는 새로운 접근 방식은 이 작업이 수행되는 방식을 바꿉니다. 인간의 직관에만 의존하는 대신, ARQ는 인공지능을 사용하여 이러한 규칙을 자동으로 테스트하고 수정합니다. 이는 단순히 추측하는 것이 아니라, 규칙이 실제로 작동하는지 확인하기 위해 생성된 코드를 직접 실행합니다. 시스템이 테스트 프로그램을 생성하고, 이를 실행한 다음, 그 결과를 사용하여 규칙을 개선하는 루프를 구축함으로써, ARQ는 인간이 수년 동안 놓쳤던 오류들을 찾아내고 수정합니다.
ARQ의 연구자들은 단순하지만 강력한 아이디어에서 시작했습니다. 즉, 규칙은 안전한 코드와 위험한 코드를 구별하는 능력만큼 가치가 있다는 것입니다. 그들은 인공지능에게 인기 있는 보안 스캐너의 특정 규칙을 주고, 매우 유사한 두 개의 프로그램을 만들라고 요청했습니다. 한 프로그램은 안전하도록 설계되었고, 다른 하나는 위험하도록 설계되었습니다. 그런 다음 AI는 스캐너가 두 프로그램에 어떻게 반응하는지 관찰했습니다. 만약 스캐너가 안전한 프로그램을 위험하다고 표시했다면, 규칙이 너무 느슨한 것이었습니다. 만약 위험한 프로그램을 놓쳤다면, 규칙이 너무 엄격한 것이었습니다. 이 스캐너의 판정과 코드가 실제로 실행되었을 때 일어난 일 사이의 불일치는 AI가 규칙을 수정하는 데 필요한 증거가 되었습니다.
AI가 단순히 추측하는 것이 아님을 보장하기 위해, 시스템은 새니타이저(sanitizer)라고 불리는 특수한 도구를 사용했습니다. 이 도구는 프로그램이 실행되는 동안 관찰하는 고정밀 센서처럼 작동합니다. 만약 프로그램이 이미 해제된 메모리를 사용하는 것과 같이 안전하지 않은 행동을 시도하면, 새니타이저는 프로그램을 중단시키고 즉시 오류를 보고합니다. 이것은 연구자들에게 '그라운드 트루스(ground truth, 실제 참값)'를 제공했습니다. 그들은 스캐너의 판정을 새니타이저의 보고와 비교할 수 있었습니다. 만약 스캐너는 프로그램이 안전하다고 말했지만 새니타이저가 충돌을 발견했다면, 연구자들은 스캐너가 실수를 했다는 것을 알 수 있었습니다. 그러면 AI는 이 확인된 실수를 사용하여 규칙을 다시 작성함으로써 규칙을 더 똑똑하게 만들었습니다.
이 과정은 연속적인 루프 속에서 일발했습니다. AI는 새로운 쌍의 테스트 프로그램을 생성하고, 실행하고, 결과를 확인한 다음, 다시 규칙을 정교화했습니다. 결정적으로, 규칙이 변경될 때마다 시스템은 이미 작동하고 있는 다른 모든 예시들에 대해 다시 테스트하여 수정 사항이 기존의 기능을 망가뜨리지 않는지 확인했습니다. 이는 AI가 문제를 해결하는 과정에서 과잉 수정하여 새로운 문제를 만드는 것을 방지했습니다. 연구팀은 이 방법을 실제 소프트웨어에서 사용되는 12가지 서로 다른 보안 규칙에 테스트했습니다. 그들은 이 규칙들을 보안 도구를 테스트하기 위해 설계된 두 개의 대규모 코드 모음과 대조하여 실행했습니다. 결과는 AI로 정교해진 규칙이 기존의 인간이 작성한 규칙보다 훨씬 더 많은 실제 취약점을 찾아냈음을 보여주었습니다. 어떤 경우에는 탐지된 위협의 수가 두 배 이상 증가하면서도, 오탐율(false alarm rate)은 98% 이상의 정확도를 유지하며 매우 낮게 유지되었습니다.
이 작업의 영향은 테스트 데이터를 넘어섰습니다. 연구자들은 데이터 압축 및 이미지 표시와 같이 인터넷의 많은 부분을 구동하는 실제 널리 사용되는 소프트웨어 라이브러리에 정교해진 규칙을 적용했습니다. 개선된 규칙은 이 라이브러리들 속에 수년 동안 숨어 있던 두 개의 버그를 찾아냈습니다. 또한, 시스템은 공용 소프트웨어 저장소에 보고되었으나 해결되지 않은 채 남아 있던 세 가지 특정 이슈를 성공적으로 해결했습니다. 이 이슈들은 인간 전문가들을 27개월 동안이나 곤혹스럽게 만들었지만, 자동화된 시스템은 규칙을 체계적으로 테스트하고 조정함으로써 이를 해결했습니다.
이 접근 방식은 우리 디지털 인프라의 안전을 유지하는 새로운 방법을 제시합니다. 결함을 찾고 수동으로 수정안을 작성하기 위해 인간을 기다리는 대신, 이제 시스템은 실제 실행에 맞서 스스로의 규칙을 지속적으로 테스트할 수 있습니다. 이 방법은 작동하기 위해 방대한 양의 라벨링된 오류 데이터베이스나 수년간의 역사적 데이터를 필요로 하지 않습니다. 단지 코드를 실행하고 그 결과를 확인할 수 있는 능력만 있으면 됩니다. 인공지능을 단순히 종이 위의 모습이 아니라 프로그램이 실제로 동작하는 방식이라는 구체적인 증거에 기반하게 함으로써, 연구자들은 보안 스캐너가 소프트웨어가 진화함에 따라 날카롭고 효과적인 상태를 유지할 수 있도록 하는 도구를 만들어냈습니다. 이 작업은 인공지능이 실행되는 코드로부터 얻은 구체적인 증거와 결합될 때, 인간의 노력이 오랫동안 저항해 온 복잡한 공학적 문제들을 해결할 수 있음을 입증합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.