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

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

SOC Prime Team
SOC Prime Team linkedin icon 팔로우

PowerShell 스크립트 블록 로그는 응용 프로그램 및 서비스 로그 → Microsoft → Windows → PowerShell → Operational에4104 이벤트로 기록됩니다. 스크립트 블록 로깅이 켜져 있어야만 완전합니다. 추출하려면:

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

PowerShell 7은 PowerShellCore/Operational이라는 별도의 채널과 자체 정책 설정을 가진 별도의 제품입니다.

공격자가 Windows 시스템을 건드렸다면, 아마도 PowerShell이 사용되었을 것입니다. 스크립트 블록 로깅은 실제로 실행된 코드를 기록하며, 종종 난독화 레이어가 벗겨진 후에 기록됩니다. Prime Core는 417개의 MITRE ATT&CK 기술과 매핑된 663개의 PowerShell 로그 탐지 규칙을 가지고 있습니다. 이는 악의적인 PowerShell 사용 (T1059.001), 난독화 (T1027), 도구를 가져오는 다운로드 크래들(T1105)을 다룹니다.

무료로 LogTotal을 사용해보세요

시작 전에

스크립트 블록 로깅이 켜져 있나요?

reg query “HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging”

EnableScriptBlockLogging이 0x1로 설정된 경우, 있는 것입니다. 키가 없으면 꺼져 있습니다. 그럼에도 불구하고, Windows PowerShell 5.1은 Warning 수준에서 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 섹션을 읽어보세요.

로그 내보내기

이벤트 뷰어에서 오른쪽 클릭 Operational 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 파일을 정제하지 않습니다. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.

  1. 업로드하십시오. 열기 logtotal.com 하고 파일을 드롭하세요. [증명: 업로드 화면, 크기 제한]
  2. 검토하기. [PROOF: what the results screen shows for PowerShell data]

실제 데이터에서 이것이 어떻게 나타나는지. [증명: 예제 소스, 예: 스크립트 블록 로깅이 켜진 테스트 VM, 인코딩된 다운로드 크래들과 무해한 AMSI 조작 테스트 문자열 실행 후 LogTotal이 플래그를 사용한 것] LogTotal이 [증명: 실제 발견]을 플래그 했습니다. [증명: 예제 파일에 대한 링크]

문제가 발생할 때

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

FAQ

스크립트 블록 로깅이 난독화된 코드를 잡아낼 수 있나요?

대부분, 그렇습니다. 스크립트 블록이 컴파일될 때 기록됩니다. 난독화된 코드가 다음 단계를 생성하고 실행할 때, 그 단계는 자신의 블록으로 기록되며 종종 읽을 수 있는 형식입니다.

전사와의 차이점은 무엇인가요?

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

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