PurCL/RepoAudit
요약
RepoAudit는 LLM 기반의 멀티 에이전트 프레임워크를 활용하여 저장소 수준에서 버그를 탐지하는 자동 코드 감사 도구입니다. 컴파일 없이도 C/C++, Java, Python, Go 등 다양한 언어를 지원하며, MetaScanAgent와 DFBScanAgent를 통해 구문 분석 및 데이터 흐름 분석을 수행합니다.
핵심 포인트
- 컴파일이 필요 없는 분석(Compilation-Free Analysis) 및 다국어 지원
- MetaScanAgent(구문 분석)와 DFBScanAgent(데이터 흐름 분석)로 구성된 멀티 에이전트 구조
- Null Pointer Dereference, Memory Leak, Use After Free 등 다양한 버그 유형 탐지 가능
- ICML 2025 채택 및 오픈 소스 프로젝트에서 100개 이상의 버그 식별 성과
RepoAudit는 일반적인 버그를 탐지하기 위한 저장소(repo) 수준의 버그 탐지기입니다. 현재 다양한 프로그래밍 언어(C/C++, Java, Python, Go 포함)에서 다양한 버그 유형(Null Pointer Dereference, Memory Leak, Use After Free 등)의 탐지를 지원합니다. 이 도구는 코드베이스를 파싱하기 위해 LLMSCAN을 활용하며, 수동 코드 감사(manual code auditing) 과정을 모방하기 위해 LLM을 사용합니다. 기존의 코드 감사 도구와 비교하여 RepoAudit는 다음과 같은 장점을 제공합니다:
- 🛡️ 컴파일이 필요 없는 분석 (Compilation-Free Analysis)
- 🌍 다국어 지원 (Multi-Lingual Support)
- 🐞 다양한 버그 유형 탐지 (Multiple Bug Type Detection)
- ⚙️ 커스터마이징 지원 (Customization Support)
[2025년 6월] "An LLM Agent for Functional Bug Detection in Network Protocols"의 프리프린트(preprint)가 공개되었으며, rfcscan의 기술적 세부 사항을 제공합니다.
!
[2025년 5월] 🎉 저희의 논문 "RepoAudit: Automated Code Auditing with Multi-Agent LLM Framework"가 ICML 2025에 채택되었습니다! 🏆
[2025년 3월] RepoAudit는 이번 분기에 오픈 소스 프로젝트에서 100개 이상의 버그를 식별하는 데 기여했습니다!
RepoAudit는 코드 감사를 위한 멀티 에이전트(multi-agent) 프레임워크입니다. 현재 버전에서는 두 가지 에이전트 인스턴스를 제공합니다:
metascan.py에 있는 MetaScanAgent:
: tree-sitter 기반의 파싱 기반 분석기를 사용하여 프로젝트를 스캔하고 프로그램의 기본적인 구문적 특성(syntactic properties)을 얻습니다.dfbscan.py에 있는 DFBScanAgent:
: 이 프리프린트(preprint)에 설명된 대로 절차 간 데이터 흐름 분석(inter-procedural data-flow analysis)을 수행합니다. 소스가 싱크에 도달해서는 안 되는 버그(source-must-not-reach-sink bugs, 예: Null Pointer Dereference)와 소스가 싱크에 반드시 도달해야 하는 버그(source-must-reach-sink bugs, 예: Memory Leak)를 포함한 데이터 흐름 버그를 탐지합니다.
저희는 더 많은 에이전트를 계속 구현하고 있으며 곧 오픈 소스로 공개할 예정입니다. DFBScanAgent 및 기타 에이전트를 활용하여 오픈 소스 커뮤니티에서 확인 및 수정된 수백 개의 버그를 발견했습니다. 이 버그 목록을 참조할 수 있습니다.
- Python 3.13을 사용하여 conda 환경을 생성하고 활성화합니다:
conda create -n repoaudit python=3.13
conda activate repoaudit
- 필요한 종속성을 설치합니다:
cd RepoAudit
pip install -r requirements.txt
Tree-sitter 라이브러리 및 언어 바인딩 (language bindings)이 설치되어 있는지 확인하십시오:
cd lib python build.py
OpenAI API 키와 Anthropic API 키를 설정하십시오:
export OPENAI_API_KEY=xxxxxx >> ~/.bashrc export ANTHROPIC_API_KEY=xxxxxx >> ~/.bashrc
RepoAudit를 시작하는 방법은 간단합니다. 단 몇 개의 명령만으로 프로젝트에 대한 전체 스캔을 실행할 수 있습니다.
benchmark 디렉토리에 여러 개의 준비된 벤치마크 (benchmark) 프로그램들을 제공합니다. 이 중 일부는 Git 서브모듈 (submodules)이므로, 먼저 초기화가 필요할 수 있습니다:
cd RepoAudit
git submodule update --init --recursive
바로 사용할 수 있는 스크립트를 제공합니다:
src/run_repoaudit.sh
이 스크립트는 분석 엔진을 사용하여 대상 프로젝트 폴더 (target project folder) 내의 특정 유형의 버그를 스캔합니다.
다음과 같은 여러 방식으로 스크립트를 실행할 수 있습니다:
cd src
sh run_repoaudit.sh
이렇게 하면 다음 위치에 있는 기본 토이 프로젝트 (toy project)를 스캔합니다:
../benchmark/Python/toy
NPD (Null Pointer Dereference, 널 포인터 역참조) 버그를 대상으로 합니다.
sh run_repoaudit.sh /path/to/your/project
이 명령은 기본적으로 제공된 프로젝트에서 NPD 버그를 스캔합니다.
상대 경로 (relative path) 또는 **절대 경로 (absolute path)**를 모두 사용할 수 있습니다.
sh run_repoaudit.sh /path/to/your/project UAF
두 번째 인자를 통해 스캔할 **버그 유형 (bug type)**을 선택할 수 있습니다. 지원되는 유형은 다음과 같습니다:
| 코드 | 의미 |
|---|---|
| MLK | Memory Leak (메모리 누수) |
| ... |
⚠️ 버그 유형은 대소문자를 구분하지 않습니다 (npd, NPD, 또는 NpD 모두 작동합니다).
스캔이 완료되면, 도구는 발견 사항이 포함된 JSON 및 로그 (log) 파일을 생성합니다.
이 파일들은 스크립트에 의해 출력된 출력 디렉토리 (output directory)에서 찾을 수 있습니다.
✅ 끝입니다!
단 하나의 스크립트만으로, 내장된 벤치마크 프로젝트 또는 지정한 임의의 프로젝트 경로에 대해 RepoAudit을 빠르게 실행할 수 있습니다.
대규모 저장소 (repository)의 경우, 순차적 분석 프로세스는 시간이 상당히 많이 소요될 수 있습니다. 분석을 가속화하려면 병렬 감사 (parallel auditing)를 선택할 수 있습니다. 구체적으로, --max-neural-workers 옵션을 설정할 수 있습니다.
더 큰 값으로 설정할 수 있습니다. 기본적으로 이 옵션은 병렬 감사 (parallel auditing)를 위해 30으로 설정되어 있습니다.
또한, 우리는 파싱 기반 분석 (parsing-based analysis)을 기본적으로 병렬 모드로 설정하였으며, 이는 --max-symbolic-workers 옵션에 의해 결정됩니다. 기본 최대 워커 (worker) 수는 30입니다.
우리는 dfbscan의 구현체를 오픈 소스로 공개했습니다. RepoAudit의 다른 에이전트 (agents)들도 곧 출시될 예정입니다. 더 자세한 정보는 저희 웹사이트를 방문해 주세요: RepoAudit: Auditing Code As Human.
도구 사용법, 프로젝트 아키텍처 (architecture), 그리고 RepoAudit의 확장 (extensions)에 대한 자세한 내용은 다음 문서들을 참조하십시오:
사용자 가이드 (User Guide): CLI 및 webUI 사용법을 포함하여 RepoAudit의 설치, 설정 및 사용에 대한 상세한 지침을 제공합니다.
프로젝트 아키텍처 (Project Architecture): 파싱 기반 분석기/도구 (parsing-based analyzers/tools), LLM 기반 도구 (LLM-driven tools), 그리고 에이전트 메모리 설계 (agent memory designs)를 포함한 RepoAudit의 멀티 에이전트 프레임워크 (multi-agent framework)에 대한 심층적인 설명을 제공합니다.
확장 (Extension): 새로운 버그 유형 및 프로그래밍 언어를 지원하도록 RepoAudit을 커스텀하기 위한 가이드라인을 제공합니다.
저희의 연구나 도구가 도움이 되었다면, 다음 논문을 인용해 주세요. 더 많은 기술 보고서 및 연구 논문들이 향후에 공개될 예정입니다.
@inproceedings{repoaudit2025,
title={RepoAudit: An Autonomous LLM-Agent for Repository-Level Code Auditing},
author={Guo, Jinyao* and Wang, Chengpeng* and Xu, Xiangzhe and Su, Zian and Zhang, Xiangyu},
...
이 프로젝트는 Purdue license 라이선스 하에 배포됩니다.
질문이나 제안 사항이 있다면 GitHub에 이슈 (issues) 또는 풀 리퀘스트 (pull requests)를 제출해 주세요. 또한 다음 유지 관리자 (maintainers)에게 연락하실 수 있습니다:
Chengpeng Wang (Purdue University) - wang6590@purdue.edu
Jinyao Guo (Purdue University) - guo846@purdue.edu
Zhuo Zhang (Columbia University) - zz3474@columbia.edu
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기