
บทความนี้เป็นไดอารี่ไม่ใช่ 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 เช็ครายละเอียดไฟล์คร่าว ๆ ก่อนจะได้ดูด้วยว่าเป็นไวรัสไหม
ก็อย่างที่คิดแฮะ มันน่าจะเป็นไวรัส คำถามต่อมามันทำงานยังไงกันนะ 🤔 เลยลอง Google ดูจนเจอสิ่งที่เรียกว่า Cuckoo Sandbox เป็นระบบที่ใช้ในการทำ Automate Malware Analysis เอ่อดีแฮะ เซ็ตเสร็จเอามัลแวร์ไปรันแล้วพักไปกินกาแฟชิว ๆ แล้วค่อยกลับมาดูผลดีกว่า แต่ว่า….
แต่ว่า…ทำไมสกอร์ไฟล์มันต่ำแปลก ๆ หว่า มันแทบไม่มีพฤติกรรมที่บ่งชี้เลยนะ เลยเลื่อนลงมาดูว่ามีพฤติกรรมอะไรที่น่าสงสัยบ้าง
นี่มันแทบไม่เจออะไรเลยนี่หว่า มีแปลก ๆ แค่มีการส่ง Packet ICMP เท่านั้นที่ดูเป็นพฤติกรรมที่ประหลาด เอาไงดีวะ Sandbox ไม่เวิร์ค น่าจะเหลือทางเดียว…แงะเองไงครับ
ก่อนอื่นรายละเอียดเกี่ยวกับไฟล์มาก่อน เลยลอง strings บน Linux ดูว่าเจออะไรน่าสนใจบ้าง
ตาเหลือบไปเห็นคำว่า “AutoIt” ใน String ที่เจอ AutoIt คืออะไรหว่า? AutoIt เป็น Script Languages ภาษาหนึ่งที่คล้าย ๆ กับภาษา Basic สร้างมาเพื่อทำงาน Automate บน Windows เลยลองหาต่อก็พบว่ามีมัลแวร์หลาย ๆ ตัวถูกพัฒนาด้วยภาษานี้และก็พบว่าภาษานี้สามารถแปลงจาก Binary ไฟล์ไปเป็น Source Code ได้…
ซึ่งโปรแกรมที่ใช้คือโปรแกรม 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 ที่เราได้มันอ่านไม่รู้เรื่อง ซึ่งน่าจะหมายความว่าคนที่สร้างมัลแวร์ตัวนี้นั้นน่าจะรู้ในข้อด้อยของภาษา 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 ให้อ่านง่ายขึ้น
จาก Source Code ที่ทำการ Deobfuscate แล้วจะเห็นว่ามันอ่านง่ายขึ้นมากกก มาดู ๆ อัลกอริทึมเหมือนการเข้ารหัสแบบ Vigenère cipher เลยนี่หว่ายังมีใครใช้อยู่ด้วยหรอวะ! ยังกะ CTF
แต่ว่า…ถึงแม้เราจะ Deobfuscate ได้บางส่วนเราก็ยังไม่เข้าใจการทำงานมันอยู่ดี เพราะเรา Deobfuscate ได้แค่ส่วนของ Function ถอดรหัส ถ้าจะให้ไปไล่ Deobfucate มือทั้ง Source Code คงไม่ไหว…เพราะอะไรหน่ะหรอ?
เพราะเราขี้เกียจยังไงหล่ะ…
แต่มันก็ยังพอมีวิธีเอา Source Code ไปใช้แบบคนขี้เกียจอยู่บ้าง ติดตาม Part 2 นะค้าบบ ถ้ามีอะไร/ตรงไหนผิดพลาดเมนชั่นมาบอกใน Twitter ก็ได้ค้าบ เดี้ยวจะเอาไปปรับปรุงแก้ ขอบคุณที่อ่านจนจบนะค้าบบ 😀