Libspear는 정적 분석 도구(Joern)에서 발견된 보안 취약점 정보를 바탕으로, LLM(대규모 언어 모델)을 사용하여 실제 공격 페이로드를 자동으로 생성하고, 실제 샌드박스 환경에서 퍼징(Fuzzing)을 통해 실행하여 취약점의 유효성을 검증하는 시스템입니다.
이 시스템은 Joern 분석 -> AI 기반 취약점 추론 -> 페이로드 생성 -> 샌드박스 실행 및 커버리지 측정 -> 결과 분석 -> 피드백으로 이어지는 전체 과정을 python3 run.py 명령어 하나로 통합하여 자동화된 파이프라인을 제공합니다.
- 통합 파이프라인: Joern 정적 분석, AI 기반 공격 시뮬레이션, 최종 보고서 생성을 단일 명령어로 실행합니다.
- AI 기반 취약점 추론: 데이터 흐름 및 코드 스니펫을 분석하여 Command Injection과 같은 보안 취약점을 자동으로 식별합니다.
- 자동 의사 코드 생성: 분석된 코드를 바탕으로 테스트 및 커버리지 측정을 위한 실행 가능한 의사 코드(Javascript)를 생성합니다.
- 지능형 페이로드 생성: 식별된 취약점과 이전 공격 시도의 피드백(크래시 정보, 커버리지)을 바탕으로 지능적으로 다음 공격 페이로드를 생성합니다.
- 샌드박스 환경에서의 실제 실행: 생성된 페이로드를
Node.js기반의 샌드박스 환경에서 실제로 실행하고, 커버리지를 측정하며 성공 여부를 자동으로 분석합니다. - 자동화된 피드백 루프:
공격 시도 -> 실제 실행 및 커버리지 측정 -> 결과 분석 (성공/실패/크래시) -> 피드백을 통한 새로운 페이로드 생성의 전체 과정을 자동화합니다. - 자동 보고서 생성: 모든 분석 및 시뮬레이션 결과를 종합하여 가독성 좋은 Markdown 형식의 최종 보고서를 생성합니다.
Libspear
├── .env # API 키, 경로 등 모든 환경 변수 설정 파일
├── .gitignore # Git 예외 처리 파일
├── requirements.txt # 필요한 Python 라이브러리 목록
├── README.md # 프로젝트 설명 파일
├── run.py # 전체 파이프라인 실행을 위한 메인 스크립트
├── Vulnerability_Report.md # 최종 생성되는 취약점 보고서
├── mutator_ai/ # 메인 파이썬 패키지
│ ├── orchestrator.py # 전체 프로세스 지휘
│ ├── vul_report.py # 최종 보고서 생성 모듈
│ └── ...
├── coverage/ # 커버리지 측정 및 퍼징 샌드박스 환경 (Node.js)
│ ├── fuzzer_runner.py # 퍼저 실행을 위한 스크립트 (구 main.py)
│ ├── core/
│ │ ├── fuzzer.js
│ │ └── fuzzer_interface.js
│ └── ...
├── P_TARGET/ # AI가 생성한 테스트용 의사 코드가 저장되는 곳
└── report/
└── report.json # Joern 분석 결과가 저장되는 파일
-
run.py: 이 프로젝트의 메인 실행 파일입니다. Joern 분석, Mutator AI 시뮬레이션, 최종 보고서 생성을 순차적으로 오케스트레이션합니다. -
mutator_ai/orchestrator.py: 이 시스템의 '두뇌' 역할을 하는 핵심 컨트롤러입니다.run_attack_simulation메서드가 전체 피드백 루프를 관리합니다. 페이로드 생성, 샌드박스 실행, 결과 분석을 순차적으로 호출하며, 성공하거나 최대 재시도 횟수에 도달할 때까지 이 과정을 반복하고 중간 결과(report_index_mid_*.json)를 저장합니다. -
mutator_ai/vul_report.py:orchestrator가 생성한 중간 결과 파일들을 모두 취합하여, 사람이 읽기 좋은 최종Vulnerability_Report.md파일을 생성하는 역할을 합니다. -
mutator_ai/sandbox_executor.py: 생성된 페이로드를 샌드박스에서 실행하는 역할을 합니다.execute메서드는coverage/fuzzer_runner.py를-m옵션을 사용해 모듈로 실행하여Node.js퍼저를 구동시키고, 그 결과(stdout, stderr)를 반환합니다. -
coverage/fuzzer_runner.py:sandbox_executor에 의해 호출되는 퍼저 실행 스크립트입니다. (이전의 루트main.py) -
mutator_ai/payload_generator.py: 공격 페이로드를 생성합니다.generate메서드는 취약점 정보와 이전 공격의 실패 원인(stderr, 크래시 로그 메시지), 커버리지 정보를 바탕으로 LLM에게 전달할 상세한 프롬프트를 동적으로 구성합니다.
-
필요 도구 설치 및 실행
# Python 3 및 pip # Node.js pip install -r requirements.txt
또한, Joern 서버가 실행 중이어야 합니다. (예:
docker-compose up -d) -
환경 변수 설정 (
.env)프로젝트 루트에
.env파일을 생성하고, 다음과 같이 자신의 환경에 맞게 값을 설정합니다. 대부분의 경로는 기본값으로 설정되어 있습니다.# .env # OpenAI API 키를 입력하세요. LLM_API_KEY="YOUR_OPENAI_API_KEY" # 최대 재시도 횟수 MAX_RETRIES=3 # 사용할 OpenAI 모델 이름 (예: gpt-4o, gpt-4-turbo) OPENAI_MODEL="gpt-4o" # --- Joern Settings --- JOERN_HOST=localhost:8080 JOERN_USER=admin JOERN_PASS=admin JOERN_IMPORT_PATH=/TARGET JOERN_RULES_PATH=/rules/test.scala JOERN_PROJECT_NAME=test_project # --- Directory and Path Settings --- # 커버리지 측정 대상 디렉터리 (수정하지 마세요) TARGET_DIR="P_TARGET" REPORT_DIR=report CORPUS_DIR=coverage/corpus # --- Output Settings --- MUTATOR_OUTPUT_PREFIX=report_index_mid # 최종 Markdown 보고서 생성 여부 (true/false) GENERATE_FINAL_REPORT=true
모든 설정이 완료되면, 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 전체 파이프라인을 시작합니다.
python3 run.py실행이 완료되면, 시뮬레이션 중간 결과물인 report_index_mid_*.json 파일들과 함께, 최종적으로 분석 내용이 정리된 Vulnerability_Report.md 파일이 루트 디렉토리에 생성됩니다.
-
동적 초기 시드 생성 (
mutator_ai/orchestrator.py)- 의사 코드에서 함수 인자를 추출해 LLM이 직접 상황에 맞는 시드 입력을 작성하도록 프롬프트를 개선했습니다.
- 인자 이름에
args,list등이 포함되면 배열 리터럴을 요구하도록 규칙을 포함했습니다.
-
퍼저 입력 정규화 로직 강화 (
coverage/core/fuzzer.js)- 대상 함수의 파라미터 시그니처를 분석해 문자열·배열 인자를 자동으로 변환합니다.
spawn류 함수의 두 번째 인자를 배열로 강제하는 기존 하드코딩을 제거하고, 모든 함수에 공통적으로 적용되는 정규화 규칙으로 대체했습니다.
-
Mutator/페이로드 후처리 (
coverage/core/mutator.py,mutator_ai/payload_generator.py)- 파이프 입력이 들어오면 인터랙티브 안내문 없이 원본 페이로드를 그대로 전달합니다.
- LLM 응답에서 감싸진 백틱/따옴표를 제거하고, 다중 인자 시
arg1||arg2형식을 강제합니다.
-
성공/실패 보고서 현황 (
interactive_report_*.json)interactive_report_1,4,6,7은 AI가 성공으로 확정했습니다.interactive_report_2(spawn ENOENT),interactive_report_3(권한 오류),interactive_report_5(잘못된 JSON)은 입력 전처리 및 환경 제약으로STOPPED_BY_AI상태로 남아 있습니다. 후속 검증 시에는 해당 페이로드를 참고해 별도의 시드나 권한 조정을 준비해야 합니다.