บทความนี้เป็นไดอารี่ไม่ใช่ Tutorial นะครับ

เมื่อช่วงเดือนที่ผ่านมาได้รับข้อความแปลก ๆ เป็นไฟล์ที่ชืิ่อ video_xxxxx.zip หรือ video_xxxxx.bz จากเพื่อนในเฟรนด์ลิสท์

ขอเซ็นเซอร์ด้วยรูปเจนนี่นะค้าบ
ขอเซ็นเซอร์ด้วยรูปเจนนี่นะค้าบ

เห็นครั้งแรกก็เดาก่อนเลยว่าเป็นมัลแวร์แน่ ๆ คนที่ส่งมาให้เป็นผู้หญิงแถมตั้งชื่อไฟล์ว่า Video อีก มันช่างน่ากด(รันไฟล์)เหลือเกินน!

พอได้ไฟล์เลยเกิดความสงสัยว่าเห้ย มันใช่ไวรัสจริงป่ะวะหรือแค่คิดไปเองเลยเป็นที่มาของไดอารี่ฉบับนี้!

ลองหาใน Google เกี่ยวกับ Malware Analysis พบว่าเราสามารถแบ่งการทำ Malware Analysis เป็น 2 ประเภท

  • Static Analysis คือการวิเคราะห์ไฟล์โดยไม่ Execute เช่นการทำ Reverse Engineer เพื่อดูว่ามัลแวร์มันทำงานยังไง
  • Dynamic Analysis คือการวิเคราะห์จากการสังเกตุพฤติกรรมการทำงานของมัลแวร์โดยจะทำบนเครื่องจริงหรือบน VM ก็ได้ โดยพฤติกรรมที่เราจะสังเกตุก็อย่างเช่น มีการเขียนไฟล์อะไรไหม แก้ Registry รึเปล่า หรือมีการติดต่อกับ Network ภายนอกหรือไม่

ดูแล้ว Static Analysis น่าจะทำได้ก่อนแฮะ เราจึงเริ่มต้นด้วยการทดลองอัพโหลดไฟล์ไปยัง Virustotal เช็ครายละเอียดไฟล์คร่าว ๆ ก่อนจะได้ดูด้วยว่าเป็นไวรัสไหม

ผลของการอัพไฟล์ขึ้นไปเช็คที่ Virustotal
ผลของการอัพไฟล์ขึ้นไปเช็คที่ Virustotal

ก็อย่างที่คิดแฮะ มันน่าจะเป็นไวรัส คำถามต่อมามันทำงานยังไงกันนะ 🤔 เลยลอง Google ดูจนเจอสิ่งที่เรียกว่า Cuckoo Sandbox เป็นระบบที่ใช้ในการทำ Automate Malware Analysis เอ่อดีแฮะ เซ็ตเสร็จเอามัลแวร์ไปรันแล้วพักไปกินกาแฟชิว ๆ แล้วค่อยกลับมาดูผลดีกว่า แต่ว่า….

ผลของ Cuckoo
ผลของ Cuckoo

แต่ว่า…ทำไมสกอร์ไฟล์มันต่ำแปลก ๆ หว่า มันแทบไม่มีพฤติกรรมที่บ่งชี้เลยนะ เลยเลื่อนลงมาดูว่ามีพฤติกรรมอะไรที่น่าสงสัยบ้าง

ผลของ Cuckoo
ผลของ Cuckoo

นี่มันแทบไม่เจออะไรเลยนี่หว่า มีแปลก ๆ แค่มีการส่ง Packet ICMP เท่านั้นที่ดูเป็นพฤติกรรมที่ประหลาด เอาไงดีวะ Sandbox ไม่เวิร์ค น่าจะเหลือทางเดียว…แงะเองไงครับ

ก่อนอื่นรายละเอียดเกี่ยวกับไฟล์มาก่อน เลยลอง strings บน Linux ดูว่าเจออะไรน่าสนใจบ้าง

strings ดู Text ในไฟล์แปป
strings ดู Text ในไฟล์แปป

ตาเหลือบไปเห็นคำว่า “AutoIt” ใน String ที่เจอ AutoIt คืออะไรหว่า? AutoIt เป็น Script Languages ภาษาหนึ่งที่คล้าย ๆ กับภาษา Basic สร้างมาเพื่อทำงาน Automate บน Windows เลยลองหาต่อก็พบว่ามีมัลแวร์หลาย ๆ ตัวถูกพัฒนาด้วยภาษานี้และก็พบว่าภาษานี้สามารถแปลงจาก Binary ไฟล์ไปเป็น Source Code ได้…

!Reverse_Engineer == Easy_Life
!Reverse_Engineer == Easy_Life

ซึ่งโปรแกรมที่ใช้คือโปรแกรม Exe2Aut ซึ่งสามารถดาวน์โหลดได้ที่ https://exe2aut.com/

เว็บเจ๊งเฉย!😥
เว็บเจ๊งเฉย!😥

เลยลองไปหาดูใน Github บังเอิญว่ามีคนได้อัพโหลดไว้พอดี

หลังจากได้โปรแกรมในการแปลงจาก Binary ไปเป็น Source Code แล้วรันเลยมั้ย? คำตอบคือไม่ครับ เพราะจริง ๆ เราไม่รู้ว่าโปรแกรม Exe2Aut นั้นปลอดภัยรึเปล่าบางที Exe2Aut อาจเป็นมัลแวร์ด้วยก็ได้ใครจะรู้ ถูกมะ? สิ่งที่เราต้องทำต่อไปก็คือ..

Setting Virtual Machine

มาสร้าง Enironment จำลองเพื่อใช้ในการวิเคราะห์มัลแวร์กันดีกว่าคือเราเซ็ตครั้งเดียวใช้ได้ทั้ง Exe2Aut แล้วยาวไปยังการทำ Dynamic Analysis เลย โดยเราจะสร้าง Virtual Machine บน VirtualBox หรือ VMWare Workstation Pro ก็ได้แล้วแต่ศรัทธา(และกำลังเงิน)

โดย VM จะมีรายละเอียดที่ควรตั้งค่าประมาณนี้

  • OS : Windows 7 64 bit
  • RAM: 4096 Mb
  • HDD: About 40 Gb
  • Network Setting: NAT เหตุผลคือ Malware จะต่อ Internet ได้แต่มองไม่เห็น Network ในวงเดียวกับเครื่อง Host ทำให้เราสามารถวิเคราะห์ Network Behavior ได้ปกติและไม่ต้องตัวในกรณีที่มัลแวร์จะแพร่กระจายมายังเครื่อง Host ด้วย

หลังจากสร้าง VM เสร็จให้สร้าง Snapshot ไว้ด้วยจะได้ Revert กลับได้

โอเคในเมื่อ Evironment น่าจะพร้อมแล้วทำการรัน exe2aut เพื่อแปลงจาก Binary ของมัลแวร์ไปเป็น Source Code โลดด

Source Code ที่ได้จาก Exe2Aut
Source Code ที่ได้จาก Exe2Aut

จากภาพด้านบนจะเห็นว่า Source Code ที่เราได้มันอ่านไม่รู้เรื่อง ซึ่งน่าจะหมายความว่าคนที่สร้างมัลแวร์ตัวนี้นั้นน่าจะรู้ในข้อด้อยของภาษา AutoIt คือสามารถทำ Reverse Engineer ได้ง่าย จึงมีการทำ Obfuscate Source Code(ทำให้ Source Code อ่านได้ยาก) ก่อนทำการคอมไพล์ ทำไงดีหว่าถึงจะ Deobfuscate Source Code ตัวนี้ได้ เลยลองหาใน Google ดู ไปเจอ Github Repo นึงมีคนอัพมัลแวร์ตัวนึงที่เขียนด้วย AutoIt ซึ่งดูลักษณะโครงสร้างเหมือนกับ Malware ตัวนี้เลยมาทราบภายหลังว่าชื่อ **DigMine **แต่มัลแวร์ตัวนี้มีข้อแตกต่างกับตัวที่เคยพบคือมีการทำ Obfuscate ที่ยากต่อการ Deobfuscate มากขึ้น พูดง่าย ๆ คือมันแงะยากขึ้นนั่นแหละ

เปรียบเทียบมัลแวร์ระหว่างตัวเก่าที่เคยพบกับตัวปัจจุบัน
เปรียบเทียบมัลแวร์ระหว่างตัวเก่าที่เคยพบกับตัวปัจจุบัน

จากภาพด้านบนจะเห็นว่าแบบเก่านั้นมีการ Obfuscate ง่ายมากคือแค่เอา String ไปเข้ารหัส แต่จากแบบใหม่จะเห็นว่ามีการตัด String ออกเป็น String ย่อย ๆ แล้วเอา String นั้นไปเก็บใน Function หรือเอาไปเก็บในตัวแปรต่าง ๆ ก่อนแล้วจึงค่อยเอามาต่อกันแล้วจึงถอดรหัส

แต่สิ่งที่เหมือนเดิมคือ Function ถอดรหัสเราเลยลองเอามา Deobfuscate ให้อ่านง่ายขึ้น

Function ในการถอดรหัสมาเขียนใหม่ให้อ่านง่ายขึ้น
Function ในการถอดรหัสมาเขียนใหม่ให้อ่านง่ายขึ้น

จาก Source Code ที่ทำการ Deobfuscate แล้วจะเห็นว่ามันอ่านง่ายขึ้นมากกก มาดู ๆ อัลกอริทึมเหมือนการเข้ารหัสแบบ Vigenère cipher เลยนี่หว่ายังมีใครใช้อยู่ด้วยหรอวะ! ยังกะ CTF

แต่ว่า…ถึงแม้เราจะ Deobfuscate ได้บางส่วนเราก็ยังไม่เข้าใจการทำงานมันอยู่ดี เพราะเรา Deobfuscate ได้แค่ส่วนของ Function ถอดรหัส ถ้าจะให้ไปไล่ Deobfucate มือทั้ง Source Code คงไม่ไหว…เพราะอะไรหน่ะหรอ?

เพราะเราขี้เกียจยังไงหล่ะ…

แต่มันก็ยังพอมีวิธีเอา Source Code ไปใช้แบบคนขี้เกียจอยู่บ้าง ติดตาม Part 2 นะค้าบบ ถ้ามีอะไร/ตรงไหนผิดพลาดเมนชั่นมาบอกใน Twitter ก็ได้ค้าบ เดี้ยวจะเอาไปปรับปรุงแก้ ขอบคุณที่อ่านจนจบนะค้าบบ 😀