PowerShell 스크립트 블록 로깅 분석은(는) 무엇을 하나요?
사용 시기
- PowerShell 스크립트 블록 로깅 분석이 필요한 보안 사고를 조사할 때
- 이 도메인에 대한 탐지 규칙 또는 위협 헌팅 쿼리를 구축할 때
- SOC 분석가가 이 분석 유형에 대한 구조화된 절차가 필요할 때
- 관련 공격 기술에 대한 보안 모니터링 범위를 검증할 때
전제 조건
- 보안 운영 개념 및 도구에 대한 숙련도
- 안전한 실행을 위한 테스트 또는 실습 환경에 대한 접근 권한
- 필수 종속성이 설치된 Python 3.8+
- 모든 테스트 활동에 대한 적절한 권한
지침
- 종속성 설치:
pip install python-evtx lxml - PowerShell 운영 로그 수집:
Microsoft-Windows-PowerShell%4Operational.evtx - python-evtx를 사용하여 이벤트 ID 4104 항목을 파싱하여 ScriptBlockText, ScriptBlockId 및 다중 부분 스크립트 재구성을 위한 MessageNumber/MessageTotal을 추출합니다.
- 탐지 휴리스틱 적용:
- Base64 인코딩 명령 (
-EncodedCommand,FromBase64String) - 다운로드 크래들 (
DownloadString,DownloadFile,Invoke-WebRequest,Net.WebClient) - AMSI 우회 패턴 (
AmsiUtils,amsiInitFailed) - 난독화 지표 (높은 엔트로피, 따옴표 표시 삽입, 문자열 연결)
- Base64 인코딩 명령 (
- 재구성된 스크립트, 위험 점수 및 MITRE ATT&CK 매핑이 포함된 보고서를 생성합니다.
python scripts/agent.py --evtx-file /path/to/PowerShell-Operational.evtx --output ps_analysis.json
예제
인코딩된 명령 실행 탐지
import base64
if "-encodedcommand" in script_text.lower():
encoded = script_text.split()[-1]
decoded = base64.b64decode(encoded).decode("utf-16-le")
다중 블록 스크립트 재구성
여러 4104 이벤트에 분할된 스크립트는 동일한 ScriptBlockId를 공유합니다. MessageNumber 순서대로 블록을 연결하여 전체 스크립트를 복구합니다.