บทความนี้จะต่อจาก Monitor Malware Behaviors Part 1 ที่ได้พูดถึงพฤติกรรมต่างๆ ของ Malware โดยผมจะพูดถึงวิธีการที่ผมใช้ในการวิเคราะห์ และดูการทำงานของ Malware ในเชิงลึก โดยผมจะพูดถึงเฉพาะในส่วนที่ผมคิดว่าน่าสนใจนะครับ
วิธีการ Monitor การทำงานของ Malware
ผมได้ใช้โปรแกรม Sysmon เพื่อดูว่ามีอะไรเกิดขึ้นในเครื่องบ้าง โดยโปรแกรม Sysmon จะบันทึกเหตุการณ์ใน Windows Event Log ซึ่งยากต่อการดูภาพรวมว่าเกิดอะไรขึ้นบ้าง ผมจึงเขียน python script สำหรับแปลง Windows Event Log เป็นรูปแบบ XML ที่มีเฉพาะข้อมูลที่สนใจ แล้วเปิดดูใน Web Browser เพื่อที่จะดูข้อมูลได้ง่ายขึ้น โดยผมได้มี 2 มุมมองคือ แบบ process tree กับ process activity
รูปนี้เป็นมุมมองของ process tree ซึ่งช่วยให้เห็นลำดับการทำงานของ process ทำให้เห็นว่า Malware มีการเรียกคำสั่งอะไรบ้าง แต่จะเห็นว่าไฟล์ที่เรียก process ลูกไม่รู้ว่ามาจากไหน นอกจากนี้ ไม่มีข้อมูลว่าแต่ละ process ทำอะไรกับเครื่องของเราบ้าง
รูปต่อมาเป็นมุมมองที่บอกว่าแต่ละ process นั้นทำอะไรบ้าง จากรูปแรกเราจะเห็นแค่ process id 2678 ทำการเรียกไฟล์ bitde_133621.tmp แต่ในรูปที่สองเราจะเห็นว่าไฟล์นี้ถูกสร้างขึ้นมาก่อน และสร้าง process id 5256 ที่เป็นตัวติดตั้ง malware ตัวแรกในเครื่อง จะเห็นว่ามุมมองแบบ process activity นี้ทำให้เห็นว่าแต่ละ process มีการสร้างไฟล์อะไรบ้าง มีการแก้ไข Registry อะไรบ้าง รวมถึงว่ามีการติดต่อไปที่ไหนบ้างเป็นลำดับ
นอกจากนี้แล้ว ผมได้ใช้โปรแกรม Wireshark เพื่อดักข้อมูลทั้งหมดที่ส่งออกมาจากเครื่องที่จะทำการทดสอบ Malware แล้วมีการนำข้อมูลมาเทียบเวลากัน ทำให้วิเคราะห์การทำงานของ Malware ได้สมบูรณ์มากขึ้น
จากข้อมูลที่เก็บและประมวลผลมาทำให้เห็นว่ามีโปรแกรมไหนเพิ่มขึ้นมา และอันไหนที่น่าจะเป็นตัว Malware จริงๆ ซึ่งตัวที่น่าสนใจมีดังต่อไปนี้
ตัวที่ใช้ Download และติดตั้ง Malware เพิ่มเติม
Malware ตัวนี้คือ ตัวติดตั้งโปรแกรมเถื่อนที่ผมลอง Download มาทดสอบ โดยการทำงานเริ่มจากการติดตั้งโปรแกรมปกติ เพียงแค่ไม่ใช่โปรแกรมที่ผมต้องการ แต่เป็นโปรแกรมที่ชื่อว่า Etal Player และพ่วง Malware ที่มีไฟล์ชื่อว่า graphstudio.exe หลังจากนั้นเรียก graphstudio.exe เปรียบเสมือนการเปิดโปรแกรมหลังติดตั้งเสร็จ ทำให้ขั้นตอนในส่วนนี้ Antivirus ยากที่จะตรวจสอบได้จากพฤติกรรมของ Malware (ปัจจุบัน Antivirus สามารถตรวจสอบได้จาก Signature)
ตัว graphstudio.exe นั้น จะแสดง UI ว่ากำลังเริ่มทำงานอยู่ และทำการติดต่อหา C2 server เพื่อส่งข้อมูลที่ถูกเข้ารหัสในเครื่องของเราไป และรับคำสั่งว่าจะให้ลง Malware ตัวไหนเพิ่ม แต่ Malware จะไม่ลงในทันที จะคอยให้ผู้ใช้งานกดปุ่ม (Download and save) เพื่อยืนยันการติดตั้งก่อน ดังรูปข้างล่าง
การที่ให้ผู้ใช้งานต้องกดเองอีกครั้ง ผมเดาว่าเป็นการป้องกันไม่ให้เครื่องมือที่ทำการวิเคราะห์อัตโนมัติจากพฤติกรรม เช่น VirusTotal, JoeSandbox, Hybrid Analysis เป็นต้น ได้ Malware ที่จะ download มาลงเพิ่ม และทำให้ Antivirus ตรวจสอบว่าตัวนี้เป็น Malware ได้ยากขึ้น
ผมได้ลองทำการค้นหาจากข้อมูลที่วิเคราะห์ที่จะพูดถึงทีหลัง พบว่า Malware ตัวนี้มีการปลอมเป็นโปรแกรมต่างๆ นอกจากตัวติดตั้งโปรแกรมเถื่อนเช่น ตัว hack ของเกม PUBG Lite, ตัว Windows keygen, ตัว download ไฟล์หนัง เป็นต้น และได้พบว่า Malware ตัวนี้ได้มีตั้งแต่ก่อนมิถุนายน 2562 จากการวิเคราะห์ของ JoeSandbox และเมื่อดูที่ screenshots จะเห็นว่าตัว sandbox ไม่ได้มีการกดปุ่ม “Download and save” ทำให้ไม่สามารถได้ Malware ตัวอื่นๆ มาวิเคราะห์ต่อได้
กลับมาที่การวิเคราะห์ Malware เนื่องด้วยก่อนและหลังจากการกดปุ่มเพื่อลง Malware นั้นเป็นการทำงานที่อยู่เบื้องหลัง และมีการติดต่อ C2 server ผมจึงเริ่มจากวิเคราะห์ Network traffic จาก Wireshark ก่อน ทำให้เห็นว่ามีการคุยกับ C2 server ด้วย HTTP protocol แต่เมื่อดูที่ post data จะเห็นว่ามีการ encrypt ข้อมูลทั้งส่งและรับ
หลังจากนั้น ผมได้ทำการหาวิธีการถอดรหัสข้อมูลที่ส่งด้วยการ reverse engineering ตัว graphstudio.exe เนื่องด้วยตัวนี้มีการ pack ผมจึงทำการ unpack โดยใช้ UnpacMe เพื่อให้ได้ binary ที่ให้ง่ายต่อการทำ reverse engineering เพื่อที่จะเลี่ยงการไล่ code ทั้งหมด ผมทำการ debug ที่ตอนส่งข้อมูล แล้วดู stack trace เพื่อหา function ที่ทำการเข้ารหัสข้อมูลก่อนส่ง และก็พบส่วนที่ใช้ทำ encryption ตามรูปข้างล่าง
เนื่องด้วยโปรแกรมถูกเขียนด้วยภาษา Delphi แล้ว compile เป็น native code ทำให้ code นั้นดูยากหน่อย ถ้าไม่คุ้นเคยกับ Delphi libraries (เช่นผม) สรุปสั้นๆ คือตัวโปรแกรมใช้ encryption key ขนาด 3 bytes คือ “4f8” และวิธีการเข้ารหัส คือเอา key มาทำ XOR กับ plaintext ซึ่งจริงๆ แล้ว key ที่สั้นขนาดนี้ กับวิธีการเข้ารหัสนี้สามารถเดาได้จาก cipher text ถ้ามีจำนวนมากพอ
หลังจากได้ key กับ encryption algorithm ผมก็เขียน python script เพื่อที่จะ decrypt ข้อความดูว่า Malware คุยอะไรกันกับ C2 server
ผลลัพธ์คือ ยังอ่านหลายส่วนไม่รู้เรื่องครับ แต่สังเกตได้ว่ามันคือ json และเหมือนกับว่าโดน encrypt อีกที ผมจึงเดาว่ามันน่าจะใช้วิธีการเข้ารหัสแบบเดิม แต่เปลี่ยน key ผมจึงสังเกต cipher text ที่ผมพอเดาได้ว่า plaintext คืออะไร แล้วใช้ XOR เพื่อหา encryption key สำหรับข้อมูลข้างใน ซึ่งได้เป็น “*2k” แล้วทำการแก้ไข script เพิ่ม decryption ข้อมูลข้างในเพิ่ม ทำให้เห็นข้อมูลส่วนที่สำคัญคือ HTTP request อันที่สอง ซึ่งส่งข้อมูลในเครื่องของเราไป
จะเห็นว่ามีการส่งข้อมูลภายในเครื่องของเรา โดยมีโปรแกรมที่ทำงานอยู่ทั้งหมดด้วย รวมทั้งมีการตรวจสอบว่าเป็น VM หรือไม่ ซึ่งน่าจะเป็นการตรวจสอบแบบง่ายๆ เพราะจากข้อมูลน่าจะเห็นอยู่แล้วว่าผมใช้ Hyper-V ต่อมาคือ HTTP response ของอันนี้ ซึ่งเป็นส่วนที่น่าสนใจที่สุดของ Malware ตัวนี้
จะเห็นว่ามีการบอกว่าจะให้ลงโปรแกรมเพิ่ม ซึ่งแบ่งตาม id และที่น่าสนใจคือ URL ใช้บอกว่าต้อง download ตัวติดตั้งโปรแกรมนี้จากที่ไหน ซึ่ง URL พวกนี้เปลี่ยนไปเรื่อยๆ เพราะผมลองดูอีกรอบ หลังจากทดสอบไม่กี่วันก็ไม่สามารถ download ได้แล้ว
ข้อมูลอีกส่วนที่น่าใจคือ price, tarif ตามที่ผมคาดเดาคือ เครื่องที่ติด Malware แต่ละตัวสามารถขายได้เงินเท่าไร ซึ่งจำนวนเงินส่วนมากจะขึ้นอยู่กับว่าเครื่องที่ติดนั้นอยู่ที่ทวีปอะไร ประเทศไหน ส่วนข้อมูลที่เหลือจะเป็นข้อมูลว่าตอนลงจะใช้ไฟล์ชั่วคราวชื่ออะไร ต้องใช้ parameter อะไร
ที่กล่าวมาข้างต้นนั้น เป็นส่วนการติดต่อก่อนที่ผู้ใช้งานจะกดปุ่มเพื่อให้เริ่มการติดตั้ง และเมื่อผู้ใช้งานกดปุ่ม จะเป็นการบอกสถานะการติดตั้งโปรแกรมกับ C2 server ดังรูปต่อไปนี้
จะเห็นว่ามีส่งข้อมูลเพื่อบอกว่า ตอนนี้ได้เริ่มทำการ download ตัวติดตั้ง Malware ของหมายเลขนี้ ตอนนี้เริ่มทำการติดตั้งแล้ว และตอนนี้ทำการติดตั้งเรียบร้อยแล้ว ซึ่งถ้าเราย้อนกลับไปดูรูปของโปรแกรม Wireshark จะเห็นว่า url path ที่ทำการ download นั้น ตรงกับข้อมูลที่ C2 server ส่งมาก่อนที่ผู้ใช้งานกดปุ่ม และเมื่อทำการติดตั้งครบแล้ว ก็จะจบการทำงาน
สรุปจุดประสงค์ของ Malware ตัวนี้ คือเป็นตัวกระจาย Malware ตัวอื่นๆ ในรูปแบบของตัวติดตั้งโปรแกรม ในหัวข้อต่อไปจะเป็นการพูดถึงการทำงานของ Malware ที่โดนติดตั้งจากตัวนี้
Miner
ตัวนี้เริ่มการทำงานจาก Task Scheduler โดยจะเรียก Helper.exe ทุกๆ 1 นาที ซึ่งตัวนี้ compile มาจาก AutoIt script ผมจึงใช้โปรแกรม AutoIT Extractor เพื่อดึง script ออกมา และอ่านทำความเข้าใจการทำงาน โดยสรุปขั้นตอนการทำงานได้ดังนี้
- ตรวจสอบว่ามีโปรแกรมที่ใช้ monitor เครื่องอยู่หรือไม่ โดยตรวจสอบว่ามีชื่อ process ตามรูปข้างล่างอยู่หรือไม่ ถ้ามีจะหยุดการทำงานทันที
2. Extract โปรแกรม tor ที่เก็บไว้ไน Helper.exe
3. ติดต่อ C2 server ที่ onion url กำหนดไว้ในโปรแกรม (รูปข้างล่าง) ผ่าน tor network เพื่อทำการ update หรือ download โปรแกรม miner ในรูปแบบของ string
รูปข้างบนจะเป็นตัวโปรแกรม Miner ที่ download มาจาก C2 server จะเห็นว่าเป็นแค่เลขฐาน 16 และเมื่อแปลง 2 ตัวแรกจาก 4D5A จะได้ MZ ซึ่งคือ magic header ของ Windows Executable
4. รันตัว miner ด้วยวิธี runpe ที่ใช้เทคนิค process hollowing ทำให้เห็นชื่อ process การทำงานเป็นโปรแกรมของ Windows เอง ที่ผมแสดงไว้ใน Part 1
5. ตรวจสอบ process เหมือนขั้นตอนที่ 1 ทุกๆ 250 มิลลิวินาที
จากขั้นตอนทั้งหมด จุดน่าสนใจคือมีการใช้ tor เพื่อติดต่อ C2 server ถ้าเราใช้โปรแกรม Wireshark ดัก traffic ที่ของเครื่องที่ใช้ tor เราจะเห็น connection เป็น SSL/TLS ทั้งหมด และ IP address ปลายทางจะเป็นแบบสุ่ม ตามรูปข้างล่าง
คุณสมบัติของ tor คือ anonymity ซึ่งคือผู้ที่ดักฟังจะไม่สามารถระบุได้ว่าใครคุยกับใคร โดยใช้การส่งต่อเป็นทอดๆ ทำให้ยากมากที่จะหา IP address ปลายทางจริงๆ (ในกรณีนี้คือ C2 server) ส่วนผู้ดักฟังก็จะเห็นเป็น TLS ทั้งหมด ทำให้แยกแยะไม่ได้ว่า traffic ไหนที่มาจาก Malware ซึ่งทำให้วิธีป้องกันเหลือเพียงแค่การ block tor หรือการตรวจสอบจากเครื่องที่ Malware ทำงานอยู่เท่านั้น
ส่วนการดักข้อมูลของ tor นั้นยังคงทำได้บนเครื่องเลย เนื่องจากโปรแกรม tor จะทำการเปิด SOCKS proxy ในเครื่องตัวเอง และรับเฉพาะจากเครื่องตัวเอง (localhost) โปรแกรมไหนที่ต้องการวิ่งผ่าน tor network จะต้องตั้งค่า proxy ให้มาที่ SOCKS proxy ของ tor ผมจึงใช้โปรแกรม RawCap เพื่อดักข้อมูลที่ localhost ซึ่งทำให้เห็น traffic ดังรูปข้างล่าง
Adware in Chrome Browser
ตัวนี้จะทำการ patch ไฟล์ “C:\Program Files\Google\Chrome\Application\chrome.dll” เพียงแค่ 1 byte เท่านั้น เพื่อที่จะปิดการตรวจสอบ signature ของตัวโปรแกรม Chrome เอง ตามรูปข้างล่าง
จากรูป คือการแก้คำสั่ง “mov edi, 3” เป็น “mov edi, 2” ซึ่งตรงนี้ผมเดาว่า คือเปลี่ยนผลการตรวจสอบที่ผิดปกติ (3) เป็นปกติ (2) เนื่องจากไฟล์นี้มีการเซ็นมาจาก Google ดังนั้นถ้าเราตรวจสอบ signature ของไฟล์ chrome.dll หลังถูก Malware แก้ไขจะเห็นว่าลายเซ็นของไฟล์นี้จะไม่ถูกต้องอีกต่อไป
หลังจากปิดฟังก์ชันการตรวจสอบความถูกต้องของตัวโปรแกรมเอง Malware ได้ทำการแก้ไข media router extension (อาจจะเป็น extension อื่น เช่น google translate) ของ Chrome ใน “%LOCALAPPDATA%\Google\Chrome\User Data\Default\Extensions” ซึ่งเป็น Chrome extension หลักที่มีตั้งแต่ติดตั้ง Chrome และโดยปกติจะไม่แสดงไว้ใน browser โดยสิ่งที่ทำคือเพิ่ม javascript หลายไฟล์ และแก้ไข manifest.json เพื่อเรียก javascript ที่เพิ่มเข้าไป ตามรูปข้างล่าง
จะเห็นว่ามีการเพิ่ม script ที่ทำงานอยู่ข้างหลังแบบ persistent รวมทั้ง script ที่จะทำงานเมื่อผู้ใช้งานเปิดหน้าเว็บ นอกจากนี้ยังมีการเพิ่ม permissions ของ extension ที่โดนแก้ไข เช่นเพิ่มให้สามารถอ่าน cookies ได้ เพิ่มให้สามารถอ่านและแก้ไขทุกๆ HTTP request ได้ (webRequest) เป็นต้น
จากที่ Malware ตัวนี้แก้ไขทั้งหมด ส่งผลให้เมื่อผู้ใช้งานเปิดใช้งาน Chrome Browser จะมี Malware script ทำงานเพิ่มด้วย ซึ่งเมื่อเราใช้ Developer tools ก็จะเห็นมี script โดนแทรกเข้าไปในหน้าที่เราเปิดทุกหน้า โดยมาจาก extension ที่โดนแก้ไข
ซึ่งผลลัพธ์จะเหมือนกับที่ผมแสดงไว้ใน Part 1 คือจะแสดงโฆษณาที่หน้าไหนก็ได้ รวมทั้งอยากเปลี่ยนเป็นขโมยข้อมูลเราเมื่อไรก็ได้เช่นกัน
Proxy
ตัวนี้จะถูกติดตั้งเป็น GoogleUpdate.exe ที่เริ่มทำงานจาก Task Scheduler และ TranslateService.exe ที่เริ่มทำงานจาก service เพื่อทำเครื่องเราให้กลายเป็น Proxy ถึงแม้ว่าเครื่องเราจะอยู่หลัง NAT
ตัวนี้วิธีการติดต่อหา C2 server จะค่อนข้างแตกต่างจากวิธีปกติคือ เริ่มจากสอบถามหา IP address ของ C2 server จาก DNS server ที่กำหนดไว้ล่วงหน้าโดยตรง แต่ชื่อเครื่องที่ส่งไปถามนั้นจะเป็น random string และไม่สามารถหา IP address จาก DNS server อื่นๆ จากการสังเกตผมได้ข้อสรุปว่า DNS server ที่ malware ใช้ต่อจะมี IP address อยู่ชุดหนึ่ง โดยจะเลือกจากตัวอักษรตัวแรกของชื่อที่ส่งไปถาม
หลังจากนั้น malware จะต่อไปหา C2 server ด้วย HTTP แต่ payload จะถูก encrypt เอาไว้
เมื่อนำ binary มาวิเคราะห์จะเห็นว่า algorithm ที่ใช้คือ RC4 และ encryption key คือ “heyfg645fdhwi” ที่กำหนดไว้ล่วงหน้าในโปรแกรม เมื่อนำ payload มา decrypt และวิเคราะห์จะเห็นรูปแบบข้อมูลจากเครื่องของเราดังนี้
ส่วนข้อมูลตอบกลับจาก C2 server จะเป็นดังนี้
เมื่อ VM ได้รับคำสั่ง connect จะทำการเชื่อมต่อไปตาม IP address ที่อยู่ในคำสั่ง และ port 1074 หลังจากต่อไปที่ C2 server อีกตัวหนึ่งสำหรับ proxy สำเร็จ Malware จะแจ้ง C2 server ตัวแรกทาง HTTP โดยเปลี่ยนค่าของ connected เป็น 1
รูปข้างบนเป็นรายละเอียดคำสั่งที่ใช้เพื่อสั่งให้เครื่อง VM ทำตัวเป็น proxy ซึ่งการเชื่อมต่อจะเหมือนกับที่ผมแสดงไว้ใน Part 1
สรุปการทำงานของ Malware ตัวนี้คือใช้ DNS พิเศษที่ทำขึ้นเองเพื่อส่ง IP address ของ C2 server ที่ใช้ควบคุมว่า VM ต้องต่อไปที่ IP address ไหนอีกทีเพื่อให้ VM ทำตัวเป็น proxy ตัว Malware นี้ผมมองว่าเป็นตัวอย่างหนึ่งของการกระจาย C2 server ซึ่งทำให้ยากต่อการหาเครื่องของคนจัดการ Malware จริงๆ
สรุป
ในส่วนนี้ น่าจะเห็นถึงความซับซ้อน และความหลากหลายของ Malware ซึ่งจะเห็นได้ว่าตัว Malware นั้นมีการใช้หลายเทคนิค เพื่อหลบเลี่ยงการตรวจพบ แม้ว่า Malware ที่ผมได้พูดถึงจะเป็นแค่ส่วนหนึ่ง และเป็นตัวที่น่าจะทำการวิเคราะห์ได้ง่าย แต่น่าจะทำให้ผู้อ่านพอเห็นภาพการทำงานของ Malware รวมทั้งพอเห็นขั้นตอนการวิเคราะห์ Malware ว่าทำอย่างไร และใช้ทักษะอะไร