แกะรอยโค้ดอันตราย: เผยกลวิธีซ่อนเร้นของมัลแวร์ PowerShell

แกะรอยโค้ดอันตราย: เผยกลวิธีซ่อนเร้นของมัลแวร์ PowerShell

ทำไมต้องซ่อนโค้ดร้าย?

โลกไซเบอร์เต็มไปด้วยภัยคุกคามที่ซับซ้อนขึ้นทุกวัน หนึ่งในวิธีการที่ผู้ไม่หวังดีใช้เพื่อหลบเลี่ยงการตรวจจับคือการ “ซ่อนเร้น” หรือ “อำพราง” (obfuscation) ชุดคำสั่งที่เป็นอันตราย เทคนิคนี้เหมือนกับการพรางตัวของสัตว์นักล่าในป่า เพื่อไม่ให้เหยื่อรู้ตัวและยังคงสามารถปฏิบัติการตามแผนได้

และทำไมต้องเป็น PowerShell? เหตุผลคือ PowerShell เป็นเครื่องมือที่มีประสิทธิภาพสูงที่ติดตั้งมาพร้อมกับระบบปฏิบัติการ Windows อยู่แล้ว ผู้โจมตีจึงสามารถใช้มันเป็นช่องทางในการทำงาน โดยไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติม ทำให้ถูกตรวจจับได้ยากขึ้น เพราะดูเหมือนเป็นส่วนหนึ่งของระบบปกติ

กลวิธีซ่อนโค้ดที่มักพบบ่อย

ผู้โจมตีมีเทคนิคหลากหลายในการซ่อนโค้ด PowerShell ให้รอดพ้นสายตาของระบบป้องกัน

การเข้ารหัสและบีบอัด

เทคนิคพื้นฐานอย่างหนึ่งคือการเข้ารหัสโค้ด เช่น การใช้ Base64 หรือการบีบอัดด้วย Gzip จากนั้นจึงถอดรหัสและคลายการบีบอัดเมื่อถึงเวลาทำงานจริง วิธีนี้ทำให้โค้ดดูเหมือนข้อมูลที่ไม่มีพิษภัยในตอนแรก

นอกจากนี้ ยังมีการใช้การเข้ารหัสแบบง่ายๆ เช่น XOR หรือการแปลงตัวอักษรเป็นตัวเลข ASCII หรือ Integer เพื่อให้ระบบป้องกันมองข้ามไป

การปรับแต่งชุดคำสั่ง

ผู้โจมตียังสามารถเล่นกับโครงสร้างของโค้ดได้ เช่น การแบ่งคำสั่งยาวๆ ออกเป็นส่วนเล็กๆ แล้วค่อยนำมาต่อกันใหม่ หรือแม้แต่การกลับด้านตัวอักษรในสตริง

การใช้ชื่อตัวแปรหรือฟังก์ชันที่ไม่มีความหมาย เช่น $a, $b1, Invoke-Expression หรือการสับเปลี่ยนตัวอักษรในคำสั่ง เพื่อให้มนุษย์หรือระบบอัตโนมัติอ่านและเข้าใจได้ยากก็เป็นอีกกลวิธีหนึ่ง

ซ่อนตัวอยู่ในเงา

บางครั้งโค้ดอันตรายอาจถูกฝังอยู่ภายในสคริปต์ PowerShell ที่ดูเหมือนปกติ หรือถูกฉีดเข้าไปในหน่วยความจำของกระบวนการทำงานที่ถูกต้องตามกฎหมาย ทำให้การตรวจจับทำได้ยากขึ้นไปอีกขั้น

เปรียบเหมือนการซ่อนเข็มในกองฟางนั่นเอง

ถอดรหัสลับ เปิดโปงภัยร้าย

สำหรับนักวิเคราะห์ความปลอดภัย การถอดรหัส (de-obfuscation) โค้ดที่ถูกอำพรางเป็นทักษะสำคัญในการทำความเข้าใจและรับมือกับภัยคุกคาม

เริ่มต้นอย่างไรดี?

สิ่งแรกคือการสังเกตหา รูปแบบที่บ่งบอกถึงการอำพราง เช่น คำสั่ง FromBase64String ที่ใช้ถอดรหัส Base64 หรือ Invoke-Expression (ย่อว่า iex) ที่ใช้รันโค้ดที่ถูกสร้างขึ้นมา

บางครั้งโค้ดอาจถูกซ้อนทับกันหลายชั้น ต้องแกะเปลือกออกทีละชั้นเหมือนปอกหัวหอม

เครื่องมือและเทคนิคช่วยไขปริศนา

นักวิเคราะห์สามารถใช้เครื่องมือช่วยได้หลายอย่าง เช่น CyberChef ซึ่งเป็นเว็บแอปพลิเคชันที่ช่วยในการเข้ารหัส ถอดรหัส และแปลงข้อมูลหลากหลายรูปแบบ

นอกจากนี้ ยังมีสคริปต์ PowerShell ที่ถูกพัฒนาขึ้นมาเพื่อช่วยในการถอดรหัสโดยเฉพาะ หรือในบางกรณี การรันโค้ดในสภาพแวดล้อมจำลอง (sandbox) เพื่อสังเกตพฤติกรรมก็เป็นอีกวิธีหนึ่งที่ช่วยเผยพิษสงของมัลแวร์ได้ แต่ต้องทำด้วยความระมัดระวังสูงสุด

ตัวอย่างการแกะรอยมัลแวร์ PowerShell

สมมติว่าพบโค้ด PowerShell ที่ดูแปลกๆ และมีคำสั่ง FromBase64String ตามด้วย DeflateStream และ StreamReader

นี่คือสัญญาณชัดเจนว่าโค้ดนี้ถูกเข้ารหัสด้วย Base64 และบีบอัดด้วย Gzip (DeflateStream เป็นส่วนหนึ่งของการบีบอัด Gzip)

วิธีแกะรอยคือ:

  1. ถอดรหัส Base64 เพื่อให้ได้ข้อมูลที่ถูกบีบอัด
  2. คลายการบีบอัดข้อมูลนั้นด้วย Gzip
  3. อ่านโค้ด PowerShell ที่แท้จริงออกมา เพื่อดูว่ามัลแวร์มีเจตนาจะทำอะไร

ความสำคัญของการเข้าใจกลไกนี้

การเข้าใจกลไกการซ่อนเร้นโค้ดและการถอดรหัส ไม่ใช่แค่เรื่องของนักวิเคราะห์ด้านความปลอดภัยเท่านั้น แต่ยังเป็นประโยชน์ต่อผู้ดูแลระบบ ผู้พัฒนา และทุกคนที่เกี่ยวข้องกับการปกป้องข้อมูล

มันช่วยให้สามารถตรวจจับการโจมตีได้เร็วขึ้น ตอบสนองต่อเหตุการณ์ได้อย่างมีประสิทธิภาพ และพัฒนาระบบป้องกันให้แข็งแกร่งขึ้น

การเรียนรู้และทำความเข้าใจกลวิธีของผู้โจมตีอย่างต่อเนื่อง จะเป็นเกราะป้องกันชั้นดีให้ระบบและข้อมูลของเราปลอดภัยจากภัยคุกคามที่ซับซ้อนในโลกดิจิทัล