PowerShell 스크립트 블록 로그를 활성화하고 내보내는 방법

PowerShell 스크립트 블록 로그를 활성화하고 내보내는 방법

SOC Prime Team
SOC Prime Team linkedin icon 팔로우

PowerShell 스크립트 블록 로그는 응용 프로그램 및 서비스 로그 → Microsoft → Windows → PowerShell → 운영에 이벤트 4104로 존재합니다. 스크립트 블록 로깅이 켜져 있어야만 완전합니다. 내보내려면:

wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx

PowerShell 7은 별도의 제품으로, PowerShellCore/Operational이라는 별도의 채널과 자체 정책 설정을 가지고 있습니다.

공격자가 Windows 박스를 만졌다면 대부분 PowerShell이 관여했을 것입니다. 스크립트 블록 로깅은 실제로 실행된 코드를 기록하며, 종종 난독화 레이어가 벗겨진 후에 기록됩니다. Prime Core는 MITRE ATT&CK 기법 417개와 매핑된 PowerShell 로그에 대한 663개 탐지 규칙을 가지고 있습니다. 이 규칙은 악의적 PowerShell 사용(T1059.001), 난독화(T1027) 및 도구를 가져오는 다운로드 크래들을 포함합니다(T1105).

무료로 시작하기

시작하기 전에

스크립트 블록 로깅이 켜져 있습니까?

reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"

EnableScriptBlockLogging이 0x1로 설정되어 있으면 켜져 있는 것입니다. 키가 없으면 꺼져 있습니다. 그렇다 하더라도 Windows PowerShell 5.1은 여전히 의심스러운 것으로 간주되는 스크립트 블록을 경고 수준의 4104 이벤트로 기록합니다. 그래서 몇몇 이벤트를 찾을 수 있습니다. 단, 그것들이 전체 그림으로 착각하지 않도록 주의하십시오.

켜는 것 은 이제부터 도움이 되며, 이미 일어난 것에 대해서는 도움이 되지 않습니다. 그룹 정책 설정을 사용하세요 관리 템플릿 → Windows 구성 요소 → Windows PowerShell → PowerShell 스크립트 블록 로깅 켜기또는 레지스트리 값을 직접 설정하세요:

reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f

PowerShell 7은 HKLMSOFTWAREPoliciesMicrosoftPowerShellCore에 자체 정책 키를 읽습니다. MSI가 아닌 zip으로 설치되었다면, 이벤트 채널은 $PSHOME에서 RegisterManifest.ps1을 실행하기 전까지 등록되지 않을 수 있습니다.

볼륨을 예상하십시오. 실행되는 모든 스크립트와 모듈이 로그에 기록됩니다. 채널의 최대 크기를 늘리지 않으면 몇 시간만 유지됩니다.

비밀을 예상하십시오. 관리자 스크립트는 때때로 평문으로 비밀번호와 API 키를 포함하며, 스크립트 블록 로깅은 이를 충실히 기록합니다. 이 파일이 다른 곳으로 가기 전에 이 점을 염두에 두십시오. 아래의 LogTotal 섹션을 읽으세요.

로그 내보내기

이벤트 뷰어에서, 마우스 오른쪽 버튼 클릭 운영 PowerShell 아래에서 선택 모든 이벤트 저장… 명령줄에서:

:: 스크립트 블록만

wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"




:: PowerShell 7

wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx




:: 고전적인 "Windows PowerShell" 로그: 호스트 명령줄로 엔진 시작 이벤트

wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx

마지막 것은 잊기 쉽지만, 가져올 가치가 있습니다. 이벤트 400은 엔진 시작을 기록하며, 엔진 버전을 포함합니다. 현대 시스템에서 엔진 버전이 2.0인 경우, 누군가가 고의로 다운그레이드하여 스크립트 블록 로깅을 회피했음을 의미합니다.

LogTotal에 업로드하고 검토

LogTotal은 EVTX를 네이티브로 읽습니다. 한 가지 먼저 알아야 할 것은: LogTotal은 아직 EVTX 파일을 정화하지 않습니다. PowerShell 로그의 경우, 위에서 언급한 비밀 때문에 중요합니다. 테스트 머신에 EVTX 업로드를 자유롭게 사용하십시오. 프로덕션 호스트의 경우, 데이터 처리 소유자에게 먼저 동의를 받으십시오.

  1. 업로드. 열기 logtotal.com 파일을 드롭하세요.
  2. 검토.

잘못될 때

증상가능한 원인Fix
4104 이벤트가 전혀 없음스크립트 블록 로깅이 꺼져 있으며, 의심스러운 것은 없었습니다.미래에 대비해 활성화하세요; Windows PowerShell 로그에서 여전히 얻을 수 있는 것을 확인하십시오.
4104 이벤트가 몇 개 뿐이며 모두 경고로깅이 꺼져 있으며, 자동 의심 스크립트 블록 로깅만 볼 수 있습니다.위와 동일함
PowerShellCore/Operational 찾을 수 없음PowerShell 7이 설치되지 않았거나, 매니페스트가 등록되지 않음$PSHOME에서 RegisterManifest.ps1 실행
4104 텍스트가 읽을 수 없는 암호문보호된 이벤트 로깅이 켜져 있습니다.복호화 인증서가 필요합니다.
로그가 몇 시간 만에 끝남기본 크기, 높은 볼륨채널의 최대 크기를 늘리세요.

FAQ

스크립트 블록 로깅은 난독화된 코드를 포착합니까?

대체로 그렇습니다. 컴파일될 때 스크립트 블록을 기록합니다. 난독화된 코드가 다음 단계를 구성하고 실행할 때, 해당 단계는 별도의 블록으로 기록되어 자주 읽기 가능한 형태로 나타납니다.

전사와의 차이점은 무엇입니까?

전사는 세션 입력 및 출력을 텍스트 파일로 폴더에 작성합니다. 스크립트 블록 로깅은 코드 자체를 이벤트 로그에 기록합니다. 두 가지 모두 서로를 보완하며, 둘 다 가치가 있습니다.

SOC Prime의 Detection as Code 플랫폼에 가입하세요 귀사의 비즈니스에 가장 중요한 위협에 대한 가시성을 개선하세요. 시작을 돕고 즉각적인 가치를 제공하기 위해 지금 SOC Prime 전문가와의 회의를 예약하세요.