บทวิเคราะห์ เชิงสืบสวน แกะแหลก!
posted on 18 Aug 2009 01:16 by penguinarmy in IT-Talk
Twitter-based Botnet Command Channel
by. Pituphong Yavirach
วันที่ 6 สิงหาคม 52 ชาว Tweet ทั้งหลาย เกือบลงแดงตาย เพราะใช้งาน Twitter ไม่ได้
เป็นเวลานานกว่าหลายชั่วโมง ที่เว็บไซต์ และระบบทั้งหมดของ Twitter.com ทำการกูระบบขึ้นมา โดยใช้ระบบสำรอง ทำให้สามารถใช้งานได้ตามปกติ จากรายงานข่าว พบว่าไม่เพียง Twitter เท่านั้นที่โดนโจมตี Facebook, Google Blog ก็โดนด้วยเช่นเดียวกัน ถึงขั้นขนาดเป้นวาระของชาติสหรัฐฯ เลยทีเดียว อีกทั้งมีการตั้งค่าหัวในการค้นหาผู้ที่ทำการโจมตีในครั้งนี้
Twitter’s security team ได้ทำการ response ในทันทีที่โดนโจมตี จากการวิเคราะห์พบว่า รูปแบบการโจมตีที่กระทำเข้ามานั้น เป็นรูปแบบ DDoS (Distribution Denial of Services) หรือการโจมตีแบบรุม โดยอาศัย BOT Net จากทั่วโลกในการโจมตี
* ข้อมูล BOT Net เพิ่มเติม http://www.sran.net/archives/51
จนเวลาผ่านไปกว่าอาทิตย์ Twitter ยังโดนโจมตีอย่างไม่หยุดหย่อน โดยอาศัยช่องทางที่ทาง twitter เปิดรับข้อมูล ไม่ว่าจากทางหน้าเว็บ หรือทาง API ที่ใช้สื่อสารกับ Third-party client
เรื่องเก่ายังไม่จบ ล่าสุด Twitter’s security team ก็พบว่า มี account ไว้ใช้สำหรับ update ชุดคำสั่งในการควบคุมด้วยเครื่อง โดยชุดคำสั่งนี้เป็นการ update ชุดคำสั่ง เพื่อเปิดโปรแกรม, ดาวน์โหลด และเปิด

จากคำสั่งเบื้องต้น โดยการสุ่มเดาและทดสอบหลายรูปแบบจาก “http://tools.web-max.ca/encode_decode.php” ทำให้เรารู้ได้ว่า คำสั่งดังกล่าว ถูกเข้ารหัสในรูปแบบของ Base 64 เพราะฉะนั้น เมื่อเราถอดข้อความ ออกมา เราก็จะได้ข้อมูลที่เราต้องการ
hxxp://bit.ly/R6STV hxxp://bit.ly/2KoHo
ในที่สุดเราก็เห็น link ที่ผู้ไม่ประสงค์ดี ส่งคำสั่งมาแล้ว
ขั้นต่อไป เราลองพยายาม download ข้อมูลตาม link ที่ได้มา เราก็ได้ text file มา 1 file พอเปิดอ่านแล้ว กลับพบว่า เจอข้อความในรูปแบบการเข้ารหัสอีกแล้ว เราเลยลองสุ่มดูอีกที ว่าผู้ไม่ประสงค์ดี น่าจะใช้การเข้ารหัสในแบบ Base64 อีกครั้ง
ผมได้เขียนโปรแกรมเล็ก ๆ ขึ้นมา 1 ตัว ด้วยภาษา Python เพื่อใช้ในการ decode ข้อมูลที่เราได้มา
# usage: python /b64_decode.py (encoded_file) (output_file)
import base64
import sys
encodedFile = sys.argv[1]
outputFile = sys.argv[2]
encodedFileHndl = open(encodedFile,"r")
outputFileHndl = open(outputFile, "w")
outputFileHndl.write(base64.b64decode(encodedFileHndl.read()))
encodedFileHndl.close();
outputFileHndl.close();
เมื่อสั่ง decrypt ออกมา ผมก็จะได้ file ที่ชื่อ m6bc6ade8.b64 ตามที่ได้ตั้งไว้ เมื่อเข้าไปดูใน file ดังกล่าว กลับพบว่าเป็น binary ที่ยังอ่านไม่ออก และยืนยันไม่ได้ว่าเป็น file ชนิดใด

โปรแกรมถัดมาที่จะใช้คือ TrID/32 - File Identifier
TrID/32 - File Identifier v2.00/Linux - (C) 2003-06 By M.Pontello
Definitions found: 3811
Analyzing...
Collecting data from file: m6bc6ade8.b64
100.0% (.ZIP) ZIP compressed archive (4000/1)
นั่นทำให้เราทราบได้ว่า นั่นคือ file สกุล zip ที่ถูก compress ไว้ หลังจากนี้เราคงต้องแตกมันออกมา ก่อนอื่น ทำการ rename file ให้เป็นสกุล .zip และใช้คำสั่ง .zip เราได้ file ออกมาดังนี้
Archive: m6bc6ade8.zip
inflating: gbpm.dll
inflating: gbpm.exe
เมื่อได้ file ออกมา 2 file แล้ว เราจะมาทำการ analyze ต่อด้วยการส่งตัวอย่าง file ไปตรวจสอบที่ Virustotal.com เราก็เห็นว่ามันคือ Trojan ชนิดหนึ่ง ที่บางค่ายรู้จัก เราจะมาดูกันต่อว่า file เหล่านี้ มีอะไรซ่อนอีกบ้าง
เริ่มด้วยการ Identify file format อีกครั้ง ทั้ง 2 file
TrID/32 - File Identifier v2.00/Linux - (C) 2003-06 By M.Pontello
Definitions found: 3811
Analyzing...
Collecting data from file: gbpm.dll
39.5% (.EXE) UPX compressed Win32 Executable (30569/9/7)
34.3% (.EXE) Win32 EXE Yoda's Crypter (26569/9/4)
11.0% (.EXE) Win32 Executable Generic (8527/13/3)
9.8% (.DLL) Win32 Dynamic Link Library (generic) (7583/30/2)
2.5% (.EXE) Generic Win/DOS Executable (2002/3)
./trid gbpm.exe
TrID/32 - File Identifier v2.00/Linux - (C) 2003-06 By M.Pontello
Definitions found: 3811
Analyzing...
Collecting data from file: gbpm.exe
39.5% (.EXE) UPX compressed Win32 Executable (30569/9/7)
34.3% (.EXE) Win32 EXE Yoda's Crypter (26569/9/4)
11.0% (.EXE) Win32 Executable Generic (8527/13/3)
9.8% (.DLL) Win32 Dynamic Link Library (generic) (7583/30/2)
2.5% (.EXE) Generic Win/DOS Executable (2002/3)
รูปแบบ format file ที่ตรงมากที่สุดคือ “UPX compressed Win32 Executable” เพราะฉะนั้น เราต้องทำการคลายข้อมูลออกมาก่อน ถึงจะตรวจ string บางอย่างต่อไปได้
ก่อนอื่นคือ สำเนา file ทั้งสอง file ให้มีนามสกุล .upx ต่อท้ายก่อน มิฉะนั้น file อาจโดนทับเสียหายได้ หลังจากนั้นใช้ UPX tool ในการคลาย file ดังกล่าว
Ultimate Packer for eXecutables
Copyright (C) 1996 – 2008
UPX 3.03 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
-------------------- ------ ----------- -----------
254464 <- 99840 39.24% win32/pe gbpm.dll.upx
Unpacked 1 file.
./upx -d gbpm.exe.upx
Ultimate Packer for eXecutables
Copyright (C) 1996 – 2008
UPX 3.03 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
-------------------- ------ ----------- -----------
71680 <- 34304 47.86% win32/pe gbpm.exe.upx
Unpacked 1 file.
เมื่อคลายมาแล้ว ขั้นตอนต่อไปคือหา string ที่เกี่ยวข้องใน file ทั้ง 2 ตัวนั้นด้วยคำสั่ง
strings gbpm.exe.upx | egrep -A200 '[A-Z]+='
และเราก็เจอจุดประสงค์ของผู้ไม่หวังดีใน file ชื่อ gbpm.dll.upx
พบข้อมูล URL บางที่ ที่จะต้องส่งข้อมูลไปหาดังนี้
hxxp://64.79.197.110/friends/post.php
hxxps://www2.bancobrasil.com.br/aapf/login.jsp?aapf.IDH=sim
hxxps://www2.bancobrasil.com.br/aapf/
hxxps://www2.bancobrasil.com.br/aapf/login.jsp
hxxps://www2.bancobrasil.com.br/senhaConta=
hxxps://www2.bancobrasil.com.br/aapf/relacionamento/mcib.jsp
hxxps://www2.bancobrasil.com.br/update/rld
hxxps://www2.bancobrasil.com.br/templates
hxxps://www2.bancobrasil.com.br/aapf/includes/sair.jsp
ยังพบการเรียกใช้ Windows system files อีกหลายรายการ
iexplore.exe
firefox.exe
KERNEL32.DLL
ADVAPI32.dll
IPHLPAPI.DLL
ole32.dll
USER32.dll
WININET.dll
ทำตัวเองเป็น Web Client เพราะมี Ryeol HTTP Client และหลอก Banner อีกรอบเป็น

ณ วันที่ 14 จาก bit.ly จากสถิติผู้ที่ติด ส่วนมากนั้นเป็นบุคคลใน Brazil และเป็นที่น่าเสียดาย ผมไม่ค่อยอยากเอาเครื่องผมเสี่ยงซะด้วยสิ ไม่อย่างนั้น คงมี network forensics กันต่อ

ถึงตอนนี้ Twitter’s security team ได้ทำการระงับการใช้งาน account ดังกล่าวเป็นที่เรียบร้อยไปแล้ว แต่ก็ยังไม่วาย ย้ายไปที่อื่นอีกเรื่อยๆ


ถึงตรงนี้แล้ว คนที่อ่านก็คงมีคำถามว่า จะติด malware ตัวนี้ได้อย่างไร ในเมื่อต้อง decode ก่อนจะ load ได้สิ? ... ตรงนี้คงต้องบอกเลยว่า ผมยังไม่เจอ หากเจอแล้ว ผมจะเอามาชำแหละให้ดูกันอีก
จบแค่นี้จริงหรือ?
ยังหลอกครับ การ analyze นี้เป็นเพียงการเริ่มต้น แค่หา string ใน file มาให้ดูมันเด็กไป เพราะทำจริง ๆ คงต้อง re-assembly กันออกมาถึงว่า มันไปจองพื้นที่หน่วยความจำส่วนไหน และทำอะไรบ้าง
ผมหมดแรงแล้วครับ ใครขยันช่วยทำต่อจากผมทีแล้วกัน.....
ก็เพียงแต่หวังว่า คนไทยอย่างเรา ๆ คงจะได้ In-trend กันในไม่ช้า อาจจะไม่ใช่รูปแบบนี้ ซึ่งน่าจะพิศดาลจากเดิม ซึ่งถ้ามันมีมาจริง ผมก็จะจับมาชำแหละอีกรอบแหละครับ
ขอเพียงให้ทุกคนโชคดี
เอวัง ด้วยประการฉะนี้.
Write by.
Pituphong Yavirach
Global Technology Integrated Co.,Ltd.
Senior IT Security Consultant
18/08/2552 00:53
ps. บทวิเคราะัห์นี้ จะใช้ในการพูดงาน Computer & Network Forensics ณ. King Mongkut's University of Technology Thonburi. วันที่ 4 กันยายน 2552 นี้
แปลและ analyse ต่อจาก -> http://asert.arbornetworks.com/2009/08/twitter-based-botnet-command-channel/
*ขออภัย ไม่ได้ติด refer แต่แรกครับ ขอบคุณครับผม
.
