Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
qlcoder — Agentic 프레임워크: CodeQL 쿼리 합성용 | Kitploit
도구/GitHubGitHub/neuralprogram/qlcoder
Static AnalysisVulnerability ScannersVulnerability AnalysisCode AnalysisPapers & ResearchAI-Assisted Reversing
GitHubneuralprogram/qlcoder

qlcoder

Agentic 프레임워크: CodeQL 쿼리 합성용

저장소 보기
255135개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

QLCoder

CodeQL 쿼리 합성을 위한 에이전트 기반 프레임워크

목차

  • 개요
  • 설치
    • Docker (권장)
    • 네이티브 (Linux)
  • 사용법
  • 빠른 시작
  • 개발 도구
  • 예시
  • 논문 환경
  • 기여
  • 팀
  • 인용
  • 관련 프로젝트

개요

QLCoder 반복적 개선

QLCoder는 LLM을 사용하여 취약점 탐지를 위한 종단 간 CodeQL 쿼리를 합성하는 프레임워크입니다. 기존 CVE의 메타데이터, LLM, 코딩 에이전트가 주어지면 QLCoder는 기존 CVE를 탐지하기 위한 CodeQL 쿼리를 반복적으로 합성합니다. 시작 쿼리는 diff의 추출된 AST로 채워진 CodeQL 경로 쿼리 템플릿입니다. 쿼리를 합성하는 동안 코딩 에이전트는 RAG 데이터베이스 및 CodeQL 언어 서버와 인터페이스하기 위한 도구에 접근할 수 있습니다. 이후 쿼리는 다변량 분석, 회귀 테스트 또는 CodeQL 쿼리 작성 지침으로 사용될 수 있습니다.

설치

Docker (권장)

1단계: CodeQL 설치

참고 - 논문에서는 CodeQL 버전 2.22.2를 사용했습니다. 그러나 모든 버전(및 언어)을 사용할 수 있습니다. QLCoder는 로컬 CodeQL 버전의 QL 팩을 벡터 데이터베이스에 저장합니다. 경로는 .env에서 구성됩니다.

CodeQL Action 릴리스 페이지에서 적절한 버전의 CodeQL Action 번들을 다운로드하세요.

  • 최신 버전의 경우: 최신 릴리스를 방문하여 OS에 맞는 적절한 번들을 다운로드하세요:

    • macOS용 codeql-bundle-osx64.tar.gz
    • Linux용 codeql-bundle-linux64.tar.gz
  • 특정 버전(예: 2.22.2)의 경우: CodeQL Action 릴리스 페이지로 이동하여 codeql-bundle-v2.22.2 태그가 붙은 릴리스를 찾고 플랫폼에 맞는 적절한 번들을 다운로드하세요.

~/codeql(또는 다른 경로 — .env의 CODEQL_HOME을 그에 맞게 업데이트)에 압축을 풉니다:

root@kitploit:~
tar -xzf codeql-bundle-<platform>.tar.gz -C ~/

2단계: CodeQL LSP MCP 서버 설치

CodeQL LSP MCP 서버를 클론하고 빌드하세요.

root@kitploit:~
git clone https://github.com/neuralprogram/codeql-lsp-mcp ~/codeql-lsp-mcp
cd ~/codeql-lsp-mcp
npm install
npm run build

3단계: 서비스 구성 및 시작

root@kitploit:~
cp .env.example .env
echo "APP_UID=$(id -u)" >> .env
echo "APP_GID=$(id -g)" >> .env

.env에 API 키와 CodeQL 경로를 입력하세요:

root@kitploit:~
ANTHROPIC_API_KEY=...

# QL 팩 경로는 CodeQL 버전에 따라 다릅니다.
# 버전 번호를 찾으려면:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → SECURITY_QLPACK_PATH에 사용
#   ls ~/codeql/qlpacks/codeql/java-all/        → LIBRARY_QLPACK_PATH에 사용
SECURITY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-queries/<version>/Security/CWE
LIBRARY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-all/<version>/semmle/code/java

그런 다음 QLCoder 앱과 ChromaDB를 시작하세요:

root@kitploit:~
docker compose up -d

4단계: CVE 저장소 검색

CVE는 data/project_info.csv에 나열되어 있어야 합니다. 이는 버그가 있는 커밋에서 저장소를 클론하고 수정 diff를 생성합니다.

root@kitploit:~
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# 또는 여러 개를 한 번에:
docker compose run --rm app python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# 파일에서 CVE 처리 (줄당 하나의 CVE ID)
docker compose run --rm app python3 scripts/get_cve_repos.py --cve-file cves.txt
# 모든 CVE 처리
docker compose run --rm app python3 scripts/get_cve_repos.py --all
# 기존 diff 강제 재생성
docker compose run --rm app python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

5단계: CodeQL 데이터베이스 생성

데이터베이스는 --build-mode=none으로 생성됩니다 — 빌드 도구 체인이 필요 없습니다.

root@kitploit:~
# 특정 CVE의 CodeQL 데이터베이스를 빌드하려면
docker compose run --rm app python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818

이렇게 하면 cves/CVE-2025-27818/CVE-2025-27818-vul 및 cves/CVE-2025-27818/CVE-2025-27818-fix가 생성됩니다.

root@kitploit:~
# 가져온 모든 CVE 저장소의 CodeQL 데이터베이스를 빌드하려면
docker compose run --rm app python3 scripts/build_codeql_dbs.py

6단계: RAG 데이터베이스 채우기

벡터 데이터베이스를 채우려면 다음 스크립트를 실행하세요. codeql_docs_fetcher.py 및 cwe_fetcher.py는 일회성 설정입니다. cves_fetcher.py는 새 CVE를 추가한 후 다시 실행해야 합니다.

root@kitploit:~
docker compose run --rm app python3 scripts/codeql_docs_fetcher.py
docker compose run --rm app python3 scripts/cwe_fetcher.py
docker compose run --rm app python3 scripts/cves_fetcher.py

네이티브 (Linux)

1단계: CodeQL 설치

참고 - 논문에서는 CodeQL 버전 2.22.2를 사용했습니다. 그러나 모든 버전(및 언어)을 사용할 수 있습니다. QLCoder는 로컬 CodeQL 버전의 QL 팩을 벡터 데이터베이스에 저장합니다. 경로는 .env에서 구성됩니다.

CodeQL Action 릴리스 페이지에서 적절한 버전의 CodeQL Action 번들을 다운로드하세요.

  • 최신 버전의 경우: 최신 릴리스를 방문하여 OS에 맞는 적절한 번들을 다운로드하세요:

    • Linux용 codeql-bundle-linux64.tar.gz
  • 특정 버전(예: 2.22.2)의 경우: CodeQL Action 릴리스 페이지로 이동하여 codeql-bundle-v2.22.2 태그가 붙은 릴리스를 찾고 플랫폼에 맞는 적절한 번들을 다운로드하세요.

다운로드 후 프로젝트 루트 디렉토리에서 아카이브를 압축 해제하세요:

root@kitploit:~
tar -xzf codeql-bundle-<platform>.tar.gz

이렇게 하면 내부에 실행 파일 codeql이 있는 하위 디렉토리 codeql/이 생성됩니다.

이 실행 파일의 경로를 PATH 환경 변수에 추가하세요:

root@kitploit:~
export PATH="$PWD/codeql:$PATH"

2단계: CodeQL LSP MCP 서버 설치

CodeQL LSP MCP 서버를 클론하고 빌드하세요.

root@kitploit:~
git clone https://github.com/neuralprogram/codeql-lsp-mcp
cd codeql-lsp-mcp
npm install
npm run build

3단계: Conda 환경 설정

root@kitploit:~
conda env create -f environment.yml
conda activate qlcoder

4단계: .env 구성

root@kitploit:~
cp .env.example .env

.env에 API 키와 CodeQL 경로를 입력하세요:

root@kitploit:~
ANTHROPIC_API_KEY=...
CODEQL_HOME=~/codeql
CODEQL_LSP_MCP_HOME=~/codeql-lsp-mcp

# QL 팩 경로는 CodeQL 버전에 따라 다릅니다.
# 버전 번호를 찾으려면:
#   ls ~/codeql/qlpacks/codeql/java-queries/   → SECURITY_QLPACK_PATH에 사용
#   ls ~/codeql/qlpacks/codeql/java-all/        → LIBRARY_QLPACK_PATH에 사용
SECURITY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-queries/<version>/Security/CWE
LIBRARY_QLPACK_PATH=~/codeql/qlpacks/codeql/java-all/<version>/semmle/code/java

5단계: CVE 저장소 검색

CVE는 data/project_info.csv에 나열되어 있어야 합니다. 이는 버그가 있는 커밋에서 저장소를 클론하고 수정 diff를 생성합니다.

root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
# 또는 여러 개를 한 번에:
python3 scripts/get_cve_repos.py --cves CVE-2025-27818,CVE-2025-0851
# 파일에서 CVE 처리 (줄당 하나의 CVE ID)
python3 scripts/get_cve_repos.py --cve-file cves.txt
# 모든 CVE 처리
python3 scripts/get_cve_repos.py --all
# 기존 diff 강제 재생성
python3 scripts/get_cve_repos.py --cve CVE-2018-9159 --force

6단계: CodeQL 데이터베이스 생성

데이터베이스는 --build-mode=none으로 생성됩니다 — 빌드 도구 체인이 필요 없습니다.

root@kitploit:~
# 특정 CVE의 CodeQL 데이터베이스를 빌드하려면
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
root@kitploit:~
# 가져온 모든 CVE 저장소의 CodeQL 데이터베이스를 빌드하려면
python3 scripts/build_codeql_dbs.py 

이렇게 하면 cves/CVE-2025-27818/CVE-2025-27818-vul 및 cves/CVE-2025-27818/CVE-2025-27818-fix가 생성됩니다.

7단계: ChromaDB 시작

별도의 터미널에서 ChromaDB를 시작하고 이 단계와 에이전트 실행 시 계속 실행 상태로 유지하세요.

root@kitploit:~
chroma run --path data/chroma_db

8단계: RAG 데이터베이스 채우기

벡터 데이터베이스를 채우려면 다음 스크립트를 실행하세요. codeql_docs_fetcher.py 및 cwe_fetcher.py는 일회성 설정입니다. cves_fetcher.py는 새 CVE를 추가한 후 다시 실행해야 합니다.

root@kitploit:~
python3 scripts/codeql_docs_fetcher.py
python3 scripts/cwe_fetcher.py
python3 scripts/cves_fetcher.py

빠른 시작

설치 지침을 따른 후, 빠른 시작은 주어진 CVE에 대한 CodeQL 쿼리 합성 예시를 안내합니다.

  1. CVE 저장소와 CVE 수정 diff를 검색합니다.
root@kitploit:~
python3 scripts/get_cve_repos.py --cve CVE-2025-27818
  1. CVE에 대한 CodeQL 데이터베이스를 생성합니다.
root@kitploit:~
python3 scripts/build_codeql_dbs.py --cve-id CVE-2025-27818
  1. RAG 데이터베이스를 채우거나 업데이트합니다.
root@kitploit:~
python3 scripts/cves_fetcher.py
  1. 파이프라인을 실행합니다.
root@kitploit:~
./run_cve.sh CVE-2025-27818

CVE ID 뒤에 추가 옵션을 전달할 수 있습니다:

root@kitploit:~
./run_cve.sh CVE-2025-27818 --model sonnet-4.5 --max-iteration 10

사용법

다음은 QLCoder에 사용 가능한 구성입니다.

시간 초과: 각 에이전트 컨텍스트 창에는 기본 셸 시간 초과(예: 300초)가 있습니다. "Context window failed" 오류가 발생하면 관련 백엔드의 실행 메서드에서 시간 초과를 늘리세요.

참고: 에이전트 지원은 논문 환경에 나열된 버전에 대해 테스트되었습니다. 최신 버전의 코딩 에이전트는 백엔드 업데이트가 필요할 수 있습니다. 최신 버전, 다른 코딩 에이전트 및 더 많은 모델에 대한 지원을 추가하는 PR을 환영합니다!

모델 (--model): sonnet-4 (기본값), sonnet-4.5 (Claude); gemini-2.5-pro, gemini-2.5-flash (Gemini); gpt-5 (Codex)

에이전트 (--agent): claude (기본값), gemini (Gemini CLI), codex (OpenAI 모델 및 오픈소스 모델)

절제 모드 (--ablation-mode):

모드설명사용 가능한 에이전트
full모든 QLCoder 도구 활성화 (기본값) 및 AST 추출Claude Code, Codex (GPT, GPT-OSS), Gemini
no_tools도구 없음 및 AST 추출 없음Claude Code, Codex (GPT, GPT-OSS), Gemini
no_lspCodeQL LSP 도구 없음Claude Code
no_docsCodeQL 문서 검색 없음Claude Code
no_astdiff에서 AST 추출 없음Claude Code

모델별 참고 사항 (GPT-5)

기본적으로 추론 노력을 중간(medium)으로 설정합니다. codex_backend.py에서 이를 재정의할 수 있습니다.

도구 없음, 문서 없음 모드 (논문 특이사항)

Chroma가 CVE 설명을 가져오는 데 사용되지 않는 경우, 사전에 가져온 설명이 task.cve_description을 통해 프롬프트에 직접 주입됩니다. scripts/cves_fetcher.py를 사용하여 설명의 로컬 JSON 파일을 채우세요:

root@kitploit:~
python scripts/cves_fetcher.py --descriptions-file data/cve_descriptions.json 

이 파일은 CVE ID를 해당 CVE 설명 문자열에 매핑하며 실행할 때마다 추가됩니다 (기존 항목은 건너뜀). --ablation-mode no_tools 또는 --ablation-mode no_docs로 실행하면 QLCoder가 자동으로 이 파일을 로드하고 분석 중인 CVE에 대해 task.cve_description을 설정합니다.

개발 도구

QLCoder 사용 시 다음 도구를 권장합니다:

QLCoder 실행에서 컬렉션 삭제 - Chroma를 정리하려면 QLCoder 사용으로 생성된 컬렉션을 삭제하는 스크립트입니다.

chromadb-ops - Chroma를 검사하고 유지 관리하기 위한 CLI 도구입니다.

root@kitploit:~
# chroma 정리에 유용
chops db clean data/chroma_db

예시

QLCoder 생성 쿼리 예시

  • Java
  • C

QLCoder MCP 구성

다음은 QLCoder 사용 시 MCP 구성의 예시입니다. 구성은 에이전트 작업 공간의 이러한 파일과 유사해야 합니다.

  • Claude Code
  • Codex
  • Gemini CLI

논문 환경

QLCoder 논문의 결과를 생성하는 데 다음 버전이 사용되었습니다.

도구버전
CodeQL2.22.2
Claude Code1.0.120
Gemini CLI0.6.0
Codex CLI0.38.0

기여

모든 기여, 풀 리퀘스트 또는 이슈를 환영합니다! 기여하려면 새 풀 리퀘스트 또는 이슈를 제출하세요. 기존 이슈를 맡는 것도 자유롭게 하세요.

팀

QLCoder는 Cornell University, Johns Hopkins University 및 University of Pennsylvania의 연구자들 간의 협력 프로젝트입니다. 질문이 있으시면 연락 주세요.

Claire Wang - University of Pennsylvania CS 박사 과정 학생

Ziyang Li - Johns Hopkins University 교수

Saikat Dutta - Cornell University 교수

Mayur Naik - University of Pennsylvania 교수

인용

ICLR'26 논문을 인용해 주세요:

root@kitploit:~
@misc{wang2025qlcoderquerysynthesizerstatic,
      title={QLCoder: A Query Synthesizer For Static Analysis of Security Vulnerabilities}, 
      author={Claire Wang and Ziyang Li and Saikat Dutta and Mayur Naik},
      year={2025},
      eprint={2511.08462},
      archivePrefix={arXiv},
      primaryClass={cs.CR},
      url={https://arxiv.org/abs/2511.08462}, 
}

Arxiv 링크

관련 프로젝트

다음은 QLCoder 저자와 관련된 프로젝트입니다. 확인해 보세요.

  • IRIS - 주어진 저장소에 대한 기존 CodeQL 보안 쿼리에 LLM이 식별한 소스/싱크를 추가합니다. QLCoder는 IRIS 아이디어 중 일부의 확장입니다. Arxiv 링크
  • CWE-Bench-Java - CVE 메타데이터, 저장소 및 소스/싱크 레이블을 포함하는 Java 보안 취약점 벤치마크입니다.
도구 다운로드