
그래프 기반 위협 탐지 시스템으로, 부정확한 그래프 벡터 매칭을 사용하여 위협 그래프를 CTI에서 파생된 공격 쿼리 그래프와 비교함으로써 자동화된 악성 판단 및 위협 점수를 제공합니다.
이 프로젝트는 ProHunter 시스템의 핵심 모듈로, 주로 PPG 모듈에서 샘플링된 위협 그래프에 대해 악성 여부를 판단하는 역할을 합니다. 이 방법의 주요 아이디어는 부정확한 그래프 벡터 매칭(inexact graph vector matching)을 사용하여 위협 그래프와 CTI에서 생성된 공격 쿼리 그래프 간의 벡터 유사도를 계산하고, 판단을 위한 위협 점수를 산출하는 것입니다. 프레임워크는 아래 그림과 같습니다.
참고: 이 프로젝트는 PPG의 다운스트림 탐지 모듈, 즉 공격 표현 및 매칭(Attack Representation & Matching) 역할을 합니다. 프로비넌스 그래프 저장 및 위협 그래프 샘플링을 포함한 전체 워크플로우는 먼저 PPG 모듈을 참조하시기 바랍니다.
Python 버전: 3.7.12
# 저장소 클론
git clone https://github.com/xueboQiu/ProHunter
cd ProHunter
# 의존성 설치
pip install -r requirements.txt
PPG 모듈에서 샘플링된 위협 그래프를 시각화합니다.
사용 방법:
위협 그래프 데이터를 해당 데이터셋 디렉토리에 배치합니다:
dataset/darpa_cadets/sgs_demo/sce041214_E5A15412-68E0-FD54-A068-DD6114FD9040_2.txt # 시각화용으로 제공된 사례
매핑 파일(예: names.json)을 준비합니다. 이 파일은 dataset_preprocess.py를 실행하면 자동으로 생성될 수 있습니다 (위협 탐지 모듈의 워크플로우 참조).
subgraph_vision.py에서 데이터셋 경로를 수정하고 시각화 스크립트를 실행합니다:
python subgraph_vision.py
스크립트에서 해당 데이터셋을 지정합니다. 프로그램은 sgs_demo 디렉토리에서 서브그래프 데이터를 자동으로 읽어 시각화합니다.
시각화 결과 예시:
다운로드한 파일을 다음 구조에 따라 프로젝트 디렉토리에 배치합니다:
datasets/darpa_{dataset_name}/raws/xx.json
python preprocess/dataset_preprocess.py # 원시 데이터셋에서 트리플 정보 추출:
그러면 다음 위치에 튜플 파일이 생성됩니다:
datasets/darpa_{dataset_name}/tuples/xx.txt
python preprocess/parse_trace.py
python pretrain_gmpt_cl.py --mode={dataset_name} --eval=False
참고: 추가 매개변수(예: epoch, learning rate)는 util.py의 parse_args() 함수에서 확인할 수 있습니다.
python pretrain_gmpt_cl.py --mode={dataset_name} --eval=True
모델은 models/{dataset_name}/best.pth에서 모델 파라미터를 로드합니다.
이 프로젝트는 즉시 테스트할 수 있도록 전처리된 CADETS 데이터셋 샘플을 제공합니다:
# 직접 평가 (사전 학습된 모델 사용)
python pretrain_gmpt_cl.py --mode=cadets --eval=True
# 모델 재학습
python pretrain_gmpt_cl.py --mode=cadets --eval=False
python pretrain_gmpt_cl.py --mode=cadets --eval=True
평가 결과 예시 :
ProHunter/
├── dataset/
│ └── darpa_cadets/ # 예제 데이터셋
│ ├── raws/ # 원시 데이터셋 파일
│ ├── sgs_demo/
│ ├── test/
│ ├── train/
│ ├── tuples/ # 추출된 튜플
│ ├── edge_type_map.json
│ ├── names.json # UUID to name mapping
│ ├── node_type_map.json
│ └── types.json # UUID to type mapping
├── models/
│ └── {dataset_name}/
│ └── best.pth # 학습된 모델 파라미터
├── preprocess/ # 데이터 전처리 스크립트
├── subgraph/
├── batch.py
├── darpa_loader.py # DARPA 데이터 로더
├── darpa_model.py
├── dataloader.py # 데이터 로딩 유틸리티
├── graph_matching.py
├── pretrain_gmpt_cl.py # 메인 학습 및 평가 스크립트
├── splitters.py
├── util.py # 유틸리티 함수 및 인자
├── requirements.txt # 의존성
└── readme.md
| 데이터셋 | 로그 파일 | 플랫폼 | 다운로드 링크 |
|---|
| E3-Cadets | ta1-cadets-e3-official-1.json.{0-4} | FreeBSD | DARPA E3 |
| E3-Theia | ta1-theia-e3-official-6r.json.{0-12} | Linux | DARPA E3 |
| E3-Trace | ta1-trace-e3-official.json.{0-203} | Linux | DARPA E3 |
| E5-Theia | ta1-theia-1-e5-official-2.bin.{27-31} | Linux | DARPA E5 |
| E5-Clearscope2_1 | ta1-clearscope-2-e5-official-1.bin.{15-20} | Android | DARPA E5 |
| E5-Clearscope2_2 | ta1-clearscope-2-e5-official-1.bin.{24-33} | Android | DARPA E5 |
| OPTC | benign/20-23Sep19/AIA-201-225/{*} | Windows | OpTC |