Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Libspear: AI 기반 취약점 분석 및 익스플로잇 생성 도구

1. 개요

Libspear는 정적 분석 도구(Joern)에서 발견된 보안 취약점 정보를 바탕으로, LLM(대규모 언어 모델)을 사용하여 실제 공격 페이로드를 자동으로 생성하고, 실제 샌드박스 환경에서 퍼징(Fuzzing)을 통해 실행하여 취약점의 유효성을 검증하는 시스템입니다.

이 시스템은 Joern 분석 -> AI 기반 취약점 추론 -> 페이로드 생성 -> 샌드박스 실행 및 커버리지 측정 -> 결과 분석 -> 피드백으로 이어지는 전체 과정을 python3 run.py 명령어 하나로 통합하여 자동화된 파이프라인을 제공합니다.

2. 주요 기능

  • 통합 파이프라인: Joern 정적 분석, AI 기반 공격 시뮬레이션, 최종 보고서 생성을 단일 명령어로 실행합니다.
  • AI 기반 취약점 추론: 데이터 흐름 및 코드 스니펫을 분석하여 Command Injection과 같은 보안 취약점을 자동으로 식별합니다.
  • 자동 의사 코드 생성: 분석된 코드를 바탕으로 테스트 및 커버리지 측정을 위한 실행 가능한 의사 코드(Javascript)를 생성합니다.
  • 지능형 페이로드 생성: 식별된 취약점과 이전 공격 시도의 피드백(크래시 정보, 커버리지)을 바탕으로 지능적으로 다음 공격 페이로드를 생성합니다.
  • 샌드박스 환경에서의 실제 실행: 생성된 페이로드를 Node.js 기반의 샌드박스 환경에서 실제로 실행하고, 커버리지를 측정하며 성공 여부를 자동으로 분석합니다.
  • 자동화된 피드백 루프: 공격 시도 -> 실제 실행 및 커버리지 측정 -> 결과 분석 (성공/실패/크래시) -> 피드백을 통한 새로운 페이로드 생성의 전체 과정을 자동화합니다.
  • 자동 보고서 생성: 모든 분석 및 시뮬레이션 결과를 종합하여 가독성 좋은 Markdown 형식의 최종 보고서를 생성합니다.

3. 프로젝트 구조

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 분석 결과가 저장되는 파일

4. 주요 코드 파일 설명

  • 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에게 전달할 상세한 프롬프트를 동적으로 구성합니다.

5. 설치 및 설정

  1. 필요 도구 설치 및 실행

    # Python 3 및 pip
    # Node.js
    pip install -r requirements.txt

    또한, Joern 서버가 실행 중이어야 합니다. (예: docker-compose up -d)

  2. 환경 변수 설정 (.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

6. 실행 방법

모든 설정이 완료되면, 프로젝트 루트 디렉토리에서 다음 명령어를 실행하여 전체 파이프라인을 시작합니다.

python3 run.py

실행이 완료되면, 시뮬레이션 중간 결과물인 report_index_mid_*.json 파일들과 함께, 최종적으로 분석 내용이 정리된 Vulnerability_Report.md 파일이 루트 디렉토리에 생성됩니다.

7. 최근 개선 사항과 알려진 한계

  • 동적 초기 시드 생성 (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 상태로 남아 있습니다. 후속 검증 시에는 해당 페이로드를 참고해 별도의 시드나 권한 조정을 준비해야 합니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages