
APT-Hunter V4.0
APT-Hunter는 윈도우 이벤트 로그를 위한 위협 헌팅 도구로, 퍼플 팀 마인드셋으로 제작되어 윈도우 이벤트 로그의 바다에 숨겨진 APT 움직임을 탐지하여 의심스러운 활동을 발견하는 시간을 단축시킵니다.
APT-Hunter
퍼플팀 관점으로 개발된 Windows 이벤트 로그 위협 헌팅.
APT-Hunter는 Windows 이벤트 로그를 위한 위협 헌팅 도구입니다. 사전 정의된 탐지 규칙과 로그 통계를 사용하여 대량의 이벤트 속에 숨겨진 APT 활동을 드러내고, 의심스러운 행위를 찾아내는 데 필요한 시간을 단축합니다. 침해 평가(compromise assessment)에 특히 효과적입니다.
결과는 Excel, Timeline Explorer, Timesketch 및 유사한 도구에서 직접 분석할 수 있는 타임라인으로 작성되며, 선택적 로컬 LLM 트리아지를 갖춘 내장 웹 대시보드에서 탐색할 수도 있습니다.
목차
기능
- Security, System, Sysmon, PowerShell, Defender, WinRM, Scheduled Tasks, Terminal Services 등을 아우르는 규칙 기반 탐지; 로그 유형은 자동으로 감지됩니다.
- 대규모 로그 세트를 빠르게 분석하기 위한 멀티프로세싱 엔진.
- 문자열, 정규식 또는 정규식 파일에 의한 헌팅, 그리고 Sigma 규칙 지원.
- Office 365 감사 로그 헌팅.
- Excel, CSV(Timesketch 지원) 및 전용 로그온, 프로세스 실행, 객체 접근 보고서로의 타임라인 출력.
- 필터링, 차트, 인시던트 타임라인, IR 보고서 내보내기(Markdown / .docx)를 갖춘 웹 대시보드.
- 모든 OpenAI 호환 서버(Ollama, LM Studio, llama.cpp)를 통한 로컬 LLM 분석. 어떤 데이터도 여러분의 컴퓨터를 벗어나지 않습니다.
- 수천 개의 경보를 검토 가능한 짧은 발견 목록으로 클러스터링하는 에이전틱 트리아지.
설치
Releases 페이지에서 컴파일된 바이너리를 다운로드하거나, 소스에서 실행하세요(Python 3.8+):
git clone https://github.com/ahmedkhlief/APT-Hunter.git
cd APT-Hunter
python3 -m pip install -r requirements.txt
빠른 시작
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
-p는 디렉터리 또는 단일 파일을 받습니다. 분석이 끝났을 때 대시보드를 열려면 -web을 추가하세요.





명령줄 옵션
전체 목록은 python3 APT-Hunter.py -h를 실행하세요. 주요 옵션:
| Option | Description |
|---|---|
-p, --path | 분석할 로그 파일 또는 폴더 |
-o, --out | 출력 이름 / 디렉터리 |
-start, -end | 타임라인 제한(ISO 형식) |
-tz | 시간대(local 또는 예: Asia/Dubai) |
-cores | 사용할 CPU 코어 수(기본값: 사용 가능한 코어의 절반) |
-hunt, -huntfile, -eid | 문자열/정규식, 정규식 파일 또는 Event ID로 헌팅 |
-sigma, -rules | JSON으로 변환된 Sigma 규칙으로 헌팅 |
-o365hunt, -o365rules, -o365raw | Office 365 감사 로그 헌팅 |
-procexec, -logon, -objaccess, -allreport | 추가 보고서 |
-web, -webview, -webhost, -webport | 웹 대시보드 실행 |
-llm, -llm-provider, -llm-url, -llm-model, -llm-key, -llm-severity, -llm-batch, -llm-context | 로컬 LLM 분석 |
예제
EVTX 파일 폴더 분석(로그 유형은 자동 감지):
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport
시간 범위 지정:
python3 APT-Hunter.py -p /opt/wineventlogs/ -o Project1 -allreport -start 2022-04-03 -end 2022-04-05T20:56
문자열, 정규식 또는 정규식 파일로 헌팅:
python3 APT-Hunter.py -hunt "psexec" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile "(psexec|psexesvc)" -p /opt/wineventlogs/ -o Project2
python3 APT-Hunter.py -huntfile huntfile.txt -p /opt/wineventlogs/ -o Project2
Sigma 규칙으로 헌팅:
python3 APT-Hunter.py -sigma -rules rules.json -p /opt/wineventlogs/ -o Project2
APT-Hunter용으로 변환된 최신 Sigma 규칙 가져오기(rules.json 작성):
./Get_Latest_Sigma_Rules.sh
웹 대시보드
브라우저에서 생성된 보고서를 탐색하세요: 필터링, 차트, 인시던트 타임라인, IR 보고서 내보내기.
python3 run_webapp.py <Output>/<Output>_Report.xlsx # or pass the output directory
python3 APT-Hunter.py -p <logs> -o <Output> -web # analyse, then open the dashboard
python3 APT-Hunter.py -webview <Output> # open an existing report
트리아지 발견을 수락하면 해당 증거와 함께 인시던트 타임라인에 고정되며, 접을 수 있는 하위 이벤트로 첨부됩니다. 이들은 다른 모든 것과 뒤섞이지 않고 테이블에서 발견 아래에 위치하며, 타임라인 차트에서는 제외되어 차트가 읽기 쉬운 상태로 유지됩니다. 발견을 제거하면 그 하위 이벤트도 함께 제거됩니다.
서버는 기본적으로 0.0.0.0:5000에 바인딩됩니다. 이를 변경하려면 --host / --port(또는 -webhost / -webport)를 사용하세요. 예를 들어 로컬로 유지하려면 --host 127.0.0.1을 사용합니다. 보고서 캐시가 재구성될 때 검토된 발견과 타임라인은 유지됩니다.

메인 대시보드: 총 이벤트 및 심각도 수, 심각도 분석, 가장 많이 트리거된 탐지 규칙, 일별 이벤트 볼륨. 사이드바에는 보고서의 모든 이벤트 로그와 요약 테이블이 나열됩니다.

인시던트 타임라인: 고정된 발견을 시간별로 표시하고 심각도에 따라 색상으로 구분합니다. 바쁜 구간을 확대/이동하고, AI 요약을 생성하고, IR 보고서 또는 CSV를 내보낼 수 있습니다.

시간순 타임라인: 공격 체인이 하위 이벤트로 확장되고, 세부 정보 패널에 내러티브, MITRE 기법, 점수가 표시됩니다.
인시던트 타임라인 차트는 확대/축소가 가능하여 몇 분 또는 몇 초 간격의 이벤트 폭주도 읽기 쉬운 상태로 유지됩니다: 차트를 드래그하여 구간을 확대하고, Shift+드래그로 이동하고, Ctrl/Cmd+휠로 커서 기준 확대/축소하거나, 아래의 개요 스트립을 사용하세요. 레이블은 절대 겹치지 않으며, 맞지 않는 레이블은 숨겨지고, 점 위에 마우스를 올리면 그 위에 쌓인 모든 이벤트가 나열됩니다.
로컬 LLM 분석
로컬 모델을 사용하여 탐지된 이벤트의 악성 여부를 명령줄에서 점수화:
python3 APT-Hunter.py -p <logs> -o <Output> -llm -llm-provider ollama -llm-model llama3 -llm-severity High
또는 대시보드에서 이벤트별로(확인, 설명, 상관 분석). 대시보드의 Settings 페이지에서 제공자(Ollama / LM Studio / llama.cpp), 모델, URL, 타임아웃을 구성하세요. 모든 OpenAI 호환 로컬 서버가 작동하며, 클라우드 서비스로 데이터가 전송되지 않습니다.
에이전틱 트리아지
대시보드 사이드바의 Agentic Triage는 수천 개의 경보를 짧은 발견 목록으로 바꿉니다:
- 클러스터링. 선택한 범위(최소 심각도, 컴퓨터, 시간 창)의 경보가 규칙, 호스트, 이벤트 ID, 메시지 형태별로 그룹화됩니다. 약 13.5k개의 경보가 있는 보고서는 일반적으로 수십 개의 클러스터로 축소됩니다.
- 1차 판정. LLM이 모든 클러스터를 정확히 한 번씩 판단합니다. 이 단계는 저렴하고 철저하여 아무것도 건너뛰지 않도록 보장합니다.
- 조사. 에이전트가 도구를 사용하여 살아남은 단서를 조사합니다: 경보를 검색하고, 경보 뒤의 원시 이벤트 로그를 읽고, 특정 시점 주변의 타임라인을 탐색하고, 찾은 것을 공격 체인으로 연결합니다. 에이전트는 발견을 제안할 수만 있으며, 타임라인 자체에 기록하지는 않습니다.
- 검토. 발견은 점수, 판정, MITRE 기법, 증거, 에이전트의 조사 추적과 함께 대기열에 나타납니다. Accept는 발견을 인시던트 타임라인(및 IR 보고서 / .docx 내보내기)에 추가하고, Reject는 이를 폐기합니다. Settings(또는 실행별)에서 자동 추가 임계값을 설정하여 높은 점수의 발견을 자동으로 수락할 수 있습니다.
조사 단계에는 도구 호출을 지원하는 LLM이 필요합니다. 지원하지 않는 경우 APT-Hunter는 고정된 피벗/상관 파이프라인으로 대체합니다. 에이전트는 1차 단계 위에 깊이만 더하기 때문에 어느 경우든 커버리지는 동일합니다. 도구 라운드와 실시간 제한은 Settings에서 상한이 설정됩니다.

에이전틱 트리아지: 실행 기록에 범위, 경보 및 클러스터 수, 발견 및 실행별 LLM 호출이 표시됩니다. 여기서 한 호스트의 91개 심각 경보가 32개 클러스터와 단일 고득점 공격 체인으로 축소되었습니다.

발견 세부 정보: 내러티브, MITRE 기법, 증거, 전체 조사 추적(에이전트가 수행한 모든 이벤트 읽기, 타임라인 창, 경보 검색)이 표시되어 각 결론을 감사할 수 있습니다.
참고: LLM 출력은 트리아지 보조 수단이지 판정이 아닙니다. 의존하기 전에 발견을 검토하세요. 추론 모델은 기본 200초보다 요청 타임아웃을 훨씬 높여야 할 수 있습니다.
출력 샘플
| Sample | Description |
|---|---|
| Sample_TimeSketch.csv | 공격의 전체 그림을 보기 위해 Timesketch에 업로드할 수 있는 타임라인 |
| Sample_Report.xlsx | 제공된 모든 Windows 로그에서 탐지된 모든 이벤트 |
| Sample_Logon_Events.csv | 파싱된 필드(날짜, 사용자, 소스 IP, 로그온 프로세스, 워크스테이션, 로그온 유형, 장치, 원본 로그)가 포함된 모든 로그온 이벤트 |
| Sample_Process_Execution_Events.csv | 이벤트 로그에서 캡처된 모든 프로세스 실행 |
| Sample_Object_Access_Events.csv | Event 4663에서 캡처된 객체 접근 |
| Sample_Collected-SIDS.csv | 조사에 도움이 되는 사용자와 그들의 SID |
| EventID_Frequency_Analysis.xls | Event ID 빈도 분석 |
작성자
Twitter: @ahmed_khlief · LinkedIn: Ahmed Khlief
라이선스
GNU GPL v3에 따라 배포됩니다. LICENSE를 참조하세요.
크레딧
Sysmon 사용 사례( Joe가 100개 이상의 사용 사례를 추가했습니다 )에 놀라운 기여를 해주신 Joe Maccry에게 감사드립니다.