KOROMOON

착한 사마리아인이 되고 싶습니다.

10/14/2020

난독화된 PowerShell 악성코드 분석을 위한 PowerShell 로깅 설정


PowerShell 은 Microsoft Windows 에 내장된 매우 강력한 명령 환경 및 스크립팅 언어로 2016년 02월 24일 PowerShell 5.0 버전 릴리스로 인해 새로운 구성 권장 사항이 업데이트됨.

기존에는 PowerShell 악성코드 동작 시 수행한 작업을 적절하게 보여주는 로깅이 부족하였으나 해당 릴리스로 인해 분석가가 분석할 수 있는 구문 분석 스크립트에 대한 정보 출력이 가능함.

PowerShell 로깅을 설정함으로써 분석가에게 악성 활동에 대한 감지 메커니즘과 시스템에서 PowerShell 사용 방식에 대한 기록을 제공함.

난독화된 PowerShell 악성코드 대응 및 조사에 필요한 정보를 확보하는 방법은 아래와 같이 설명함.




( 1 ) PowerShell 설치


Windows 10 에서는 향상된 PowerShell 로깅을 지원하기 위한 소프트웨어 업데이트가 필요하지 않음.

Windows 7/8.1/2008/2012 에서 업데이트가 안 될 경우 필요하며 아래 프로그램을 설치해야 함.

WMF 5.0 을 설치하기 전에 Windows 7 및 2008 R2 를 WMF (Windows Management Framework) 4.0 으로 업그레이드해야 함.


- 설치 프로그램 -

.NET 4.5

WMF (Windows Management Framework) 4.0 (Windows 7/2008 만 해당)

WMF (Windows Management Framework) 5.0




( 2 ) 로깅 설정


로깅은 다음과 같이 그룹 정책을 통해 구성해야 함.


1. 실행(단축키 : Ctrl + R) > gpedit.msc 입력


2. 로컬 그룹 정책 편집기 창에서 컴퓨터 구성 > 관리 템플릿 > Windows 구성 요소 > Windows PowerShell 이동

모듈 로깅, 스크립트 블록 로깅, 기록 이렇게 3 가지 로깅 유형을 지원하며 각각 정보와 설정하는 방법은 다음과 같음.


3. 모듈 로깅 정보 및 설정


모듈 로깅은 변수 초기화 및 명령 호출을 포함하여 PowerShell 이 실행될 때 파이프라인 실행 세부 정보를 기록함.

또한, 스크립트 일부, 난독 해제된 코드 및 출력용으로 형식화된 일부 데이터를 기록함.

해당 로깅은 실행된 명령어를 안정적으로 캡처하지 못할 수 있지만 다른 PowerShell 로깅 소스에서 누락된 일부 세부 정보를 캡처함.


모듈 로깅은 PowerShell 3.0 부터 사용할 수 있으며 이벤트 ID 4103 으로 기록됨.

모듈 로깅은 많은 양의 이벤트를 생성하지만 이러한 이벤트는 다른 소스에서 캡처되지 않은 귀중한 출력을 기록함.


로컬 그룹 정책 편집기의 Windows PowerShell 창에서 Turn on Module Logging(모듈 로깅 사용) 을 더블 클릭하여 사용으로 선택한 후 모듈 이름 옆에 표시 버튼을 클릭함.

모듈 이름 창에서 * 을 입력하여 확인 버튼을 클릭함.

그리고 Turn on Module Logging(모듈 로깅 사용) 창에서 확인 버튼을 클릭하여 설정을 완료함.


4. 스크립트 블록 로깅 정보 및 설정


스크립트 블록 로깅은 PowerShell 엔진에서 실행되는 코드 블록을 기록하여 스크립트 및 명령어를 포함하여 실행된 코드의 전체 내용을 캡처함.

해당 특성으로 인해 실행 시 난독 해제된 코드도 기록함.

예를 들어 스크립트 블록 로깅은 원래 난독화된 코드를 기록하는 것 외에도 PowerShell -EncodedCommand 인수로 전달된 디코딩된 명령어와 XOR, Base64, ROT13, 암호화 등으로 난독화된 명령어 그리고 원래 난독화된 코드를 기록함.

그러나 스크립트 블록 로깅은 실행된 코드의 출력을 기록하지 않음.


이벤트 ID 4104 로 기록되며 이벤트 로그 메시지의 최대 길이를 초과하는 스크립트 블록은 여러 항목으로 조각화됨.

스크립트 블록 로깅은 모듈 로깅보다 적은 이벤트를 생성함.


PowerShell 4.0 에서는 사용할 수 없지만 PowerShell 5.0 은 스크립트 블록 로깅이 활성화되지 않은 경우에도 블록의 내용이 의심스러운 명령어 또는 스크립팅 기술 목록과 일치하면 코드 블록을 자동으로 기록함.

스크립트 블록 로깅이 명시적으로 비활성화되지 않는 한 이러한 의심스러운 블록은 이벤트 ID 4104 "경고" 수준으로 기록됨.

활성화되지 않은 경우에도 알려진 의심스러운 활동에 대해 일부 포렌식 데이터가 로깅되지만 윈도우 시스템에서 보안 기능으로 간주하지 않음.


그러나 스크립트 블록 로깅을 활성화하면 PowerShell 프로세스에서 의심스러운 것으로 간주되는 블록 뿐만 아니라 모든 활동이 캡처됨.

이를 통해 분석가는 악의적인 활동의 전체 범위를 식별할 수 있음.

의심스러운 것으로 간주되지 않는 블록도 이벤트 ID 4104 에 기록되지만 "상세" 또는 "정보" 수준으로 기록됨.


참고로 PowerShell 스크립트 블록 로깅 켜기 창에서 로그 스크립트 블록 호출 시작/중지 이벤트 옵션을 제공함.

이 옵션은 스크립트 블록 ID 별로 스크립트 블록의 시작 및 중지를 기록하며 각각 이벤트 ID 4105, 4106 으로 기록됨.

장기간에 걸쳐 실행되는 PowerShell 스크립트의 경우에 추가 포렌식 정보를 제공할 수 있지만 이벤트 로그량이 엄청나게 증가하므로 대부분의 환경에서는 권장되지 않음.


로컬 그룹 정책 편집기의 Windows PowerShell 창에서 PowerShell 스크립트 블록 로깅 켜기를 더블 클릭하여 사용으로 선택함.

추가적으로 난독화된 PowerShell 악성코드를 분석하는 용도라면 로그 스크립트 블록 호출 시작/중지 이벤트 옵션을 선택한 후 확인 버튼을 클릭함.


5. 기록 정보 및 설정


기록(Transcription)은 모든 입력 및 출력을 포함한 모든 PowerShell 세션의 고유한 레코드를 세션에 표시되는 것과 동일하게 만듬.

스크립트(Transcript)는 사용자 및 세션별로 구분된 텍스트 파일에 기록됨.

또한, 스크립트에는 분석을 돕기 위해 각 명령어에 대한 타임 스탬프와 메타데이터가 포함되어 있음.

그러나 기록(Transcription)은 PowerShell 터미널에 표시되는 내용만 기록하며 실행된 스크립트의 내용이나 파일 시스템과 같은 다른 대상에 기록된 출력은 포함하지 않음.


PowerShell 기록은 충돌을 방지하기 위해 자동으로 이름이 "PowerShell_transcript" 이름으로 지정됨.

기본적으로 대화 내용은 사용자의 문서 폴더에 기록되지만 로컬 시스템이나 네트워크에서 액세스 가능한 모든 위치에서 구성할 수 있음.

보안상 데이터를 쉽게 검토할 수 있고 공격자가 쉽게 삭제할 수 없는 원격 쓰기 전용 네트워크 공유에 기록을 작성하는 것이 좋음.

스크립트는 저장 효율성이 매우 놓고 쉽게 압축되며 grep 과 같은 표준 도구를 사용하여 검토할 수 있음.


로컬 그룹 정책 편집기의 Windows PowerShell 창에서 PowerShell 기록 켜기를 더블 클릭하여 사용으로 선택함.

실행된 각 명령어에 대한 타임스탬프를 기록하려면 호출 헤더 포함 옵션을 선택함.

그리고 기록 출력 디렉터리 옵션은 보안 담당자가 액세스할 수 있는 쓰기 전용의 제한된 네트워크 공유여야 하며 지정하지 않으면 사용자의 문서 디렉토리 아래에 기록 파일이 생성됨.

다 설정하면 확인 버튼을 클릭함.


6. 설정 완료된 로컬 그룹 정책 편집기의 Windows PowerShell 창 화면은 아래와 같음.




( 3 ) PowerShell 이벤트 로그 위치 및 정보


가능한 모듈 로깅, 스크립트 블록 로깅, 기록 이렇게 3 가지 로깅 유형을 활성화할 것을 권장함.

이러한 각 로깅 유형은 PowerShell 활동 분석에 유용한 고유한 데이터를 기록함.

그러나 로그량 문제를 고려하여 위 옵션들 중 선택적으로 설정하거나 PowerShell 이벤트 로그량을 최소 1GB 로 늘리고 보존 기간을 적절하게 설정함.

PowerShell 이벤트 로그를 확인하는 방법은 아래와 같음.


1. 실행(단축키 : Ctrl + R) > eventvwr.msc 입력


2. 응용 프로그램 및 서비스 로그 > Windows PowerShell 이동


참고로 Operational 이벤트 로그는 PowerShell 원격 연결을 포함하여 인바운드 및 아웃 바운드 Windows Remote Management 연결을 기록함.

(위치 : 이벤트 뷰어창 > 응용 프로그램 및 서비스 로그 > Microsoft > Windows > Windows Remote Management > Operational)

로그는 인증에 사용된 사용자 이름과 함께 출발지(인바운드 연결) 또는 목적지(아웃바운드 연결)를 캡쳐함.

이 연결 데이터는 PowerShell 원격을 사용하여 측면 이동을 추적하는 데 유용할 수 있음.

보안상 1년 이상의 데이터를 저장할 수 있는 충분한 크기로 설정해야 함.


SIEM 또는 기타 로그 모니터링 장비에서 의심스러운 스크립트 블록 로깅 이벤트 관련 이벤트 ID 4104 ("경고" 포함)를 모니터링하는 걸 고려해야 함.




( 4 ) 난독화된 PowerShell 악성코드 실행 후 PowerShell 로깅 테스트


난독화된 악성코드 샘플 sha256 : c161b39138e9a52b9460b7af3f72c3dd0b6049fa2b079b12f691568d826f3df7


위 설정한 후 난독화된 PowerShell 악성코드 샘플을 실행함.

다수의 PowerShell 이벤트 로그가 발생하였으며 특정 이벤트 로그 중간에 C&C 주소를 확인함.


< 난독화된 PowerShell 악성코드 화면 >


< PowerShell 이벤트 로그에서 C&C 주소 확인 >




참고 사이트 : 

https://www.fireeye.com/blog/threat-research/2016/02/greater_visibilityt.html

https://www.securityinbits.com/malware-analysis/deobfuscate-powershell-using-powershell-logging/

https://www.securityinbits.com/malware-analysis/excel-4-0-macro-hta-vbscript-powershell-analysis-ataware-ransomware-part-1/




============================================================

본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.


댓글 없음:

댓글 쓰기