กลยุทธ์ลับของมัลแวร์: ซ่อนการเรียกใช้ API ด้วยการแฮช

กลยุทธ์ลับของมัลแวร์: ซ่อนการเรียกใช้ API ด้วยการแฮช

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

มันช่วยให้มัลแวร์หลีกเลี่ยงการตรวจจับจากการวิเคราะห์แบบคงที่ (static analysis) ได้อย่างมีประสิทธิภาพ แล้วมันทำงานอย่างไร และทำไมถึงเป็นภัยคุกคามที่น่าสนใจสำหรับนักวิเคราะห์ความปลอดภัย? เรามาเจาะลึกไปพร้อมกัน

ทำไมต้องซ่อนการเรียก API?

โดยปกติแล้ว เมื่อโปรแกรมต้องการเรียกใช้ฟังก์ชัน API เช่น CreateRemoteThread เพื่อสร้างเธรดจากระยะไกล หรือ VirtualAlloc เพื่อจัดสรรหน่วยความจำ มันจะมีการระบุชื่อฟังก์ชันเหล่านี้ไว้อย่างชัดเจนในส่วนที่เรียกว่า Import Address Table (IAT) ของตัวโปรแกรม

เปรียบเหมือนรายการวัตถุดิบที่บอกว่าโปรแกรมนี้จะใช้อะไรบ้าง

เครื่องมือวิเคราะห์มัลแวร์และโปรแกรมแอนตี้ไวรัสจำนวนมากจะสแกน IAT เพื่อหาฟังก์ชันที่อาจบ่งบอกถึงกิจกรรมที่น่าสงสัย หรือเป็นอันตราย

แต่ด้วยเทคนิค API Hashing มัลแวร์ไม่จำเป็นต้องระบุชื่อฟังก์ชัน API ที่ต้องการอย่างโจ่งแจ้งใน IAT อีกต่อไป

มันช่วยให้มัลแวร์ดูเหมือนเป็นโปรแกรม “สะอาด” ในการตรวจสอบเบื้องต้น และยากต่อการวิเคราะห์จากโค้ดที่ยังไม่ทำงานจริง

API Hashing ทำงานอย่างไร?

หัวใจของเทคนิคนี้คือการแปลงชื่อฟังก์ชัน API ที่ต้องการให้กลายเป็น “ค่าแฮช” (hash value) ซึ่งเป็นตัวเลขที่ได้จากการคำนวณทางคณิตศาสตร์

แทนที่จะเก็บชื่อ LoadLibraryA หรือ GetProcAddress ไว้ตรงๆ ในโค้ด มัลแวร์จะเก็บเพียงค่าแฮชของชื่อเหล่านั้นที่ได้คำนวณไว้ล่วงหน้าตั้งแต่ตอนคอมไพล์โปรแกรม

เมื่อมัลแวร์เริ่มทำงาน มันจะทำการค้นหาฟังก์ชัน API ที่ต้องการแบบ ไดนามิก หรือในขณะรันไทม์

โดยทั่วไปแล้ว มัลแวร์จะวนลูปผ่านโมดูลต่างๆ (เช่น ไฟล์ DLL) ที่ถูกโหลดอยู่ในหน่วยความจำของโปรเซส

สำหรับแต่ละโมดูล มันจะดึงรายการฟังก์ชันทั้งหมดที่โมดูลนั้นส่งออก (export) ออกมา จากนั้นคำนวณค่าแฮชของชื่อฟังก์ชันเหล่านั้นทีละตัว

หากค่าแฮชที่คำนวณได้ตรงกับค่าแฮชที่มัลแวร์เก็บไว้ นั่นหมายความว่าได้พบฟังก์ชัน API ที่ต้องการแล้ว และสามารถเรียกใช้งานได้ทันที

การค้นหา API ด้วยวิธีนี้ทำให้การวิเคราะห์แบบคงที่ทำได้ยากขึ้นมาก

เจาะลึกกลไกภายใน

กระบวนการค้นหาที่ว่านี้ เริ่มต้นจากการที่มัลแวร์จะต้องหาตำแหน่งของ DLL สำคัญๆ ก่อน เช่น kernel32.dll ซึ่งเป็นที่อยู่ของฟังก์ชันพื้นฐานส่วนใหญ่

หลังจากนั้น มัลแวร์จะทำการวิเคราะห์โครงสร้างข้อมูลภายในของ DLL นั้น เพื่อเข้าถึงส่วนที่เรียกว่า Export Directory Table ซึ่งเป็นเหมือนสารบัญที่บอกว่า DLL นี้มีฟังก์ชันอะไรบ้างที่เปิดให้โปรแกรมอื่นเรียกใช้ได้

จากตารางนี้ มัลแวร์จะสามารถเข้าถึงชื่อของฟังก์ชันต่างๆ ที่ถูกส่งออก (exported functions)

จากนั้นใช้ ฟังก์ชันแฮชเฉพาะ ซึ่งมักจะเป็นฟังก์ชันที่ออกแบบมาอย่างง่ายและรวดเร็ว ไม่จำเป็นต้องเป็นฟังก์ชันแฮชที่ซับซ้อนและปลอดภัยแบบที่ใช้ในการเข้ารหัสข้อมูล

ฟังก์ชันแฮชจะทำการคำนวณค่าแฮชจากชื่อของแต่ละฟังก์ชัน และนำไปเปรียบเทียบกับค่าแฮชเป้าหมายที่ถูกฝังไว้ในตัวมัลแวร์

เมื่อพบการจับคู่ มัลแวร์ก็จะได้ที่อยู่ของฟังก์ชัน API ที่ต้องการในหน่วยความจำ และสามารถทำการเรียกใช้ได้โดยตรง

กลไกทั้งหมดนี้เกิดขึ้นอย่างเงียบๆ ในหน่วยความจำ ทำให้การตรวจสอบโค้ดก่อนการรันไม่สามารถระบุได้ว่ามัลแวร์นี้กำลังจะเรียกใช้ฟังก์ชันใดบ้าง

นี่คือเหตุผลที่เทคนิค API Hashing กลายเป็นเครื่องมืออันทรงพลังในการอำพรางตัวตน และหลีกเลี่ยงการตรวจจับจากระบบรักษาความปลอดภัยสมัยใหม่ ทำให้มัลแวร์สามารถซ่อนพฤติกรรมที่แท้จริงและปฏิบัติการได้อย่างแนบเนียนยิ่งขึ้น และเป็นความท้าทายที่สำคัญสำหรับนักวิเคราะห์มัลแวร์ทั่วโลก.