PLAINBIT
HOME
  • 😄Welcome
    • Artifacts
  • 🪟Windows
    • $Recycle.bin
    • EventLog
      • 원격 유입
      • 응용프로그램 실행
    • LNK
    • PowerShell
      • PowerShell Version and Logging
      • PagePowerShell Script Block Logging
    • Prefetch
    • Registry
    • WebBrowser (Chrome)
    • WER
Powered by GitBook
On this page
  • 1. 파워셸 버전 2
  • 2. 파워셸 버전 3,4
  • 3. 파워셸 버전 5

Was this helpful?

  1. Windows
  2. PowerShell

PowerShell Version and Logging

(2) 파워셸 버전에 따른 로깅 차이

PreviousPowerShellNextPagePowerShell Script Block Logging

Last updated 1 year ago

Was this helpful?

파워셸에 입력한 명령어 로그는 기본적으로 Windows 7 운영체제에서는 남지 않으며, Windows 10 운영체제에서는 다음 경로에 기록하고 있다.

C:\Users\%user%\Appdata\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

ConsoleHost_history.txt 파일의 내용을 보면 위와 같이 입력한 명령어를 그대로 저장하고 있다.

또한 파워셸 실행 시 이벤트 뷰어 -> 응용 프로그램 및 서비스 로그 -> Windows PowerShell 경로에 이벤트 로그가 남는다. Windows 7, Windows 10 운영체제 모두 해당 경로에 이벤트 로그를 남기지만 파워셸에 입력한 명령어에 대한 로그는 확인할 수 없다. 다만 이벤트 로그에 기록된 시간을 토대로 파워셸이 실행된 시간 정도는 파악할 수 있다.

파워셸은 다음 5가지 파일에서 로그를 확인할 수 있다.

1) 로컬 혹은 원격에서 파워셸 명령이나 스크립트가 실행되는 경우

  • Windows PowerShell.evtx

  • Microsoft-Windows-PowerShell/Operational.evtx

  • Microsoft-Windows-PowerShell/Analytic.etl

2) 원격 파워셸 활동에 대한 경우 (파워셸은 WinRM을 통해 원격 처리를 구현)

  • Microsoft-Windows-WinRM/Operational.evtx

  • Microsoft-Windows-WinRM/Analytic.etl

Analytic 로그는 이벤트 뷰어 -> View -> Show Analytics and Debug Logs -> Microsoft-Windows-WinRemote Management/Analytic에서 로그 활성화를 선택하거나 wevutil Set-Log 명령을 실행하여 로깅 기능을 활성화해야 확인할 수 있다.

파워셸은 버전에 따라 로그로 확인할 수 있는 데이터가 다르다. 다음 표는 파워셸 버전에 따른 로깅 정보이다.

1. 파워셸 버전 2

파워셸 버전 2에서 HostName 필드는 400, 403 이벤트 ID에 해당하는 로그에 기록된다. 로컬 활동의 경우 ConsoleHost(HostName=ConsoleHost), 원격 활동의 경우 ServerRemoteHost(HostName=ServerRemoteHost)로 기록된다. 따라서 분석 시 해당 값을 통해 파워셸 세션의 지속 기간을 비롯하여 원격인지 로컬인지 파악 가능하다. 아쉬운 점으로는 어떤 명령어를 입력했는지 파악할 수 없다는 점이다.

2. 파워셸 버전 3,4

파워셸 버전 3, 4는 이전 버전에 비해 포괄적인 로깅 기능을 지원한다. 로컬 그룹 정책 편집기에서 로컬 컴퓨터 정책 -> 컴퓨터 구성 -> 관리 템플릿 -> Windows 구성 요소 -> Windows PowerShell -> Turn on Module Logging(모듈 로깅 사용) 을 활성화하면 명령 및 모듈에 대한 로깅을 남긴다.

또는 로컬 컴퓨터 정책 -> 사용자 구성 -> 관리 템플릿 -> Windows 구성 요소 -> Windows PowerShell -> Turn on Module Logging(모듈 로깅 사용) 을 활성화할 수 있는데 사용자 구성 정책이 컴퓨터 구성 정책보다 우선 순위이다.

다음 레지스트리 값을 설정하면 동일한 결과를 얻을 수 있다.

  • HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ModuleLogging → EnableModuleLogging = 1

  • HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ModuleLogging\ModuleNames → * = *

로깅 모듈 사용을 활성화하면 파워셸 모듈 사용 시 4103 이벤트 ID 로 로그를 남긴다. 위 그림과 같이 입력한 명령어를 확인할 수 있지만 난독화가 되어 있는 경우에는 확인할 수 없다. 파워셸 버전2에 비하면 입력한 명령어의 로그가 남기 때문에 로그 분석에 있어 조금 더 정확한 결과를 얻을 수 있다. 하지만 공격자가 명령문을 난독화한 경우에는 분석이 쉽지 않기 때문에 아쉬운 부분이 존재한다.

3. 파워셸 버전 5

파워셸 버전5에서는 난독화를 복호화할 수 있는 로깅 기능이 존재한다. 로컬 그룹 정책 편집기의 같은 경로에서 PowerShell 스크립트 블록 로깅 켜기를 활성화하면 된다.

다음 레지스트리 키 값을 설정하면 같은 결과를 얻을 수 있다.

  • HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging → EnableScriptBlockLogging = 1

스크립트 블록 로깅을 활성화하면 4104 이벤트 ID로 난독화 된 명령문 1개, 복호화 된 명령문 1개가 로깅된다. 스크립트 코드를 실행하기 전에 난독화를 해제하는 과정에서 복호화된 코드를 로깅한다.

공격자가 명령문을 난독화하더라도 스크립트 블록 로깅을 활성화한 상태라면 로그를 쉽게 분석할 수 있을 것이다. 공격자의 행위를 신속하게 파악하는 것은 시스템이 입은 피해를 파악하는 것과 이어진다. 따라서 사용하는 시스템의 파워셸 버전을 5 이상으로 유지하고, 스크립트 블록 로깅을 활성화하는 것이 중요하다. 다음 글에서는 스크립트 블록 로깅이 활성화된 환경에서 vbs, ps1, cmd 등 다양한 방법으로 파워셸 명령어를 실행했을 때 남는 로그의 차이점에 대해 비교해보겠다.

🪟
[그림 1] ConsoleHost_history.txt 파일 내용 예시
[그림 2] PowerShell 이벤트 로그 중 일부
[그림 3] Analytic 로그 설정 창
[그림 4] 파워셸 버전에 따른 로깅 정보
[그림 5] EventID 400
[그림 6] Turn on Module Logging 설정 화면
[그림 7] EventID 4103
[그림 8] 스크립트 블록 로깅 켜기 설정 화면
[그림 9] EventID 4104