FireEye ได้ออก paper น่าสนใจในเรื่องการตรวจจับ Powershell ที่ทำมาเพื่อประสงค์ร้ายและพยายามการหลบเลี่ยงการตรวจจับด้วยวิธีการ obfuscate ต่างๆ

ผมสรุปคร่าวๆไว้ให้ดังนี้ครับ

การตรวจจับ

1.  Process Auditing and Command Line Logging
เราสามารถตรวจจับและดู command line argument ได้โดยดูจาก EventID 4688 ซึ่ง Windows ที่ support การเก็บ log ส่วนนี้จะต้องเป็น Windows version 8.1 , Server 2012 R2 เป็นต้นไป หรือไม่ก็ติดตั้ง KB3004375 เพิ่มเติม หรืออีกวิธีหนึ่งคือการใช้งาน Sysmon
2. PowerShell Module, Script Block, and Transcription Logging
เราสามารถเก็บ log การกระทำใดๆที่ถูก invoke โดย powershell ได้ โดยดูได้จาก Powershell Blue Team
3. Centralized Event Log Collection / Forwarding
เราสามารถใช้วิธีต่างๆในการเก็ย log และส่ง log ทั้งหมดไปยังส่วนกลางได้ หากใช้ Windows Event Forwarding สามารถดูได้จาก link นี้

การหลบเลี่ยงการตรวจจับ

1. Hacker อาจใช้วิธีการ copy powershell.exe ให้กลายเป็นชื่ออื่นอย่าง Chrome, Firefox และการ input argument โดยตรงโดยใช้ผ่าน standard input ทำให้ไม่เห็นข้อมูลที่ชัดเจนใน log 4688 และคนส่วนใหญ่ก็มองข้ามการดู log 4104 ที่เป็น powershell script block log อีกด้วย

2. การกำหนดและซ่อน payload ของการทำงานไว้ใน environment ของ powershell ทำให้สามารถอ้างอิง payload ผ่านตัวแปรของ environment ได้ ซึ่งทำให้การวิเคราะห์จะเห็นเป็นแค่ชื่อตัวแปรเท่านั้น

3. การ Obfuscate ด้วยวิธีต่างๆ ไม่ว่าจะเป็นการ replace คำที่เป็นชื่อ function ที่ถูกตรวจจับด้วย Antivirus ไปเป็นอย่างอื่น, หรือการเพิ่ม comment เยอะๆเพื่อให้การตรวจจับมองข้าม, หรือการแยกคำแล้วนำมา concatnation กันทีหลัง และอื่นๆ รวมถึงการใช้ตัวช่วยในการ obfuscation โดยใช้ Invoke-Obfuscation, Invoke-CradleCrafter เป็นต้น

ทางทีมงานของ FireEye ได้ออกเครื่องมือสำหรับการอ่าน Obfuscate Powershell จากภายใน Event Log แล้วแสดงออกมา โดยชื่อเครื่องมือคือ Revoke-Obfuscation

Source:: FireEye