
แกะรอยโค้ดอันตราย: เผยกลวิธีซ่อนเร้นของมัลแวร์ 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)
วิธีแกะรอยคือ:
- ถอดรหัส Base64 เพื่อให้ได้ข้อมูลที่ถูกบีบอัด
- คลายการบีบอัดข้อมูลนั้นด้วย Gzip
- อ่านโค้ด PowerShell ที่แท้จริงออกมา เพื่อดูว่ามัลแวร์มีเจตนาจะทำอะไร
ความสำคัญของการเข้าใจกลไกนี้
การเข้าใจกลไกการซ่อนเร้นโค้ดและการถอดรหัส ไม่ใช่แค่เรื่องของนักวิเคราะห์ด้านความปลอดภัยเท่านั้น แต่ยังเป็นประโยชน์ต่อผู้ดูแลระบบ ผู้พัฒนา และทุกคนที่เกี่ยวข้องกับการปกป้องข้อมูล
มันช่วยให้สามารถตรวจจับการโจมตีได้เร็วขึ้น ตอบสนองต่อเหตุการณ์ได้อย่างมีประสิทธิภาพ และพัฒนาระบบป้องกันให้แข็งแกร่งขึ้น
การเรียนรู้และทำความเข้าใจกลวิธีของผู้โจมตีอย่างต่อเนื่อง จะเป็นเกราะป้องกันชั้นดีให้ระบบและข้อมูลของเราปลอดภัยจากภัยคุกคามที่ซับซ้อนในโลกดิจิทัล