วันพุธที่ 2 พฤษภาคม พ.ศ. 2550

การกำจัด malware ที่ใช้เทคนิค DLL injection

เนื่องจากเมื่อวานไปเจอ malware ที่ใช้ DLL injection เข้าไปยัง process ของระบบ ก็เลยมาเล่าสู่กันฟังครับ (ความจริงเขียนไว้กันลืมตะหาก 555) แต่ก่อนที่เล่าถึง malware ตัวดังกล่าว จะขออธิบายก่อนสักเล็กน้อยว่า DLL injection นั้นคืออะไร

DLL injection เป็นเทคนิคที่นักเขียน malware นิยมนำมาใช้ในการฝัง malicious code ในระบบ โดย malicious code ที่ทำการฝังลงไปนั้นจะอยู่ในรูปของ DLL ซึ่งจะถูกฝังเข้าไปยัง process ที่ทำงานอยู่ในระบบเช่น explorer.exe ซึ่งถ้าหาก incident handler ไม่ได้ทำการตรวจสอบ DLL ที่แต่ละ process ทำการโหลด ก็จะไม่ทราบว่าระบบถูกฝัง malware ลงไป เนื่องจาก malware ที่ใช้วิธีนี้เวลาทำงาีนจะไม่ทำการสร้าง process ใหม่ แต่จะสร้าง thread จาก process เดิม ซึ่งไม่สามารถมองเห็นด้วย task manager

เรื่องเริ่มขึ้นเมื่อเครื่องของชาวบ้านคนหนึ่ง หลังจากที่ทำการเปิดเครื่อง nod32 จะทำการแจ้งเตือนทุกครั้ง

Photo Sharing and Video Hosting at Photobucket

ข้อความแจ้งเตือนดังกล่าวเป็นการบอกว่า explorer.exe ได้ทำการสร้าง malware ขึ้นมา ??!

เมื่อทำการสำรวจ process ที่รันอยู่พบว่ามี explorer.exe รันอยู่เพียงโปรเซสเดียวเท่านั้น ซึ่งเป็น explorer.exe ของระบบ แต่เมื่อเรียกดู DLL ที่ explorer.exe ทำการโหลดเข้าไปนั้นพบว่ามี DLL ที่แปลกประหลาดอยู่

Photo Sharing and Video Hosting at Photobucket

DLL ที่แปลกประหลาดคือ DLL ที่ถูกไฮไลต์ด้วยสีม่วง ซึ่งเป็น DLL ที่ถูก packed หรือทำการเข้ารหัส เมื่อใช้ nod32 ทำการแสกน DLL เหล่านี้ก็ไม่พบความผิดปกติแต่อย่างไร

เมื่อได้รายชื่อของ DLL ที่น่าสงสัย ขั้นตอนต่อไปคือนำรายชื่อของ DLL เหล่านี้ไปคำการค้นหาในตำแหน่ง Auto-Start ต่างๆใน registry key ซึ่งจากการค้นหาพบว่ารายชื่อของ DLL เหล่านี้ปรากฏอยู่ใน

HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify


ผมจึงได้ทำการลบ registry key ที่มีชื่อของ malicious DLL ทิ้งไปแล้วทำการ reboot ระบบ แต่เมื่อทำการล็อกอินเข้ามาใหม่พบว่า nod32 ยังคงแจ้งเตือนเหมือนเดิม แต่ชื่อของไฟล์เปลี่ยนไป ผมจึงได้ทำการตรวจสอบ explorer.exe ใหม่อีกครั้ง และพบว่ายังคงถูก DLL inject เข้าไปเหมือนเดิม โดยรายชื่อ malicious DLL นั้นจะมีชื่อที่เหมือนเดิม 2 ไฟล์คือ

ssqolij.dll
vturp.dll

ทั้ง 2 ไฟล์อยู่ใน directory C:\WINDOWS\system32 สำหรับ malicious DLL ตัวอื่นนั้นชื่อจะ random เปลี่ยนไปเรื่อยๆ

ผมจึงได้ทำการ monitoring การเข้าถึง registry key เพื่อทำการตรวจสอบว่ามี process ใดเข้าถึง registry key ของ ssqolij.dll หลังจากที่ทำการลบ key เหล่านี้ทิ้งไป ซึ่งพบว่า winlogon.exe ซึ่งเป็น process ของระบบ (ดูจาก process tree) มีการเรียกดู registry key เหล่านี้ตลอดเวลา และเมื่อใดก็ตามที่ทำการลบ registry key เหล่านี้ทิ้งไป winlogon.exe ก็จะทำการสร้าง key ก็จะทำการสร้าง key ขึ้นมาใหม่ นี่จึงเป็นสาเหตุที่ว่าทำไม registry key เหล่านี้กลับมาอยู่ในระบบ

นอกจากนี้ผมได้ทำการสำรวจ DLL ที่ winlogon.exe ทำการโหลดเข้ามาในระบบ พบว่า winlogon.exe ถูก DLL injection เหมือนกัน ซึ่งมี 2 ไฟล์หลักคือ ssqolij.dll และ vturp.dll

เนื่องจาก winlogon.exe เป็น process ที่ทำหน้าที่เกี่ยวกับการล็อกอินของระบบ หากเราทำการ kill process นี้ไปจะทำให้เกิดอาการจอฟ้า ดังนั้นผมเลือกที่จะทำการ suspend winlogon.exe ซึ่งปรากฏว่าได้ผล กล่าวคือไม่มีการเข้าถึง registry key จาก winlogon.exe อีก ในขณะเดียวกันระบบก็ไม่ขึ้นจอฟ้า ซึ่งทำให้ผมสามารถทำงานต่อไปได้

เมื่อหยุด winlogon.exe ได้ ผมจึงทำการลบ regiskey key ทิ้งไป จากนั้นใช้ movefile ทำการกำหนด schedule ให้ทำการลบ malicious DLL ทิ้งไปหลังจากที่ระบบทำการ reboot ใหม่ พบว่า malicious DLL ได้ถูกลบไป และ winlogon.exe และ explorer.exe ก็ไม่ถูก DLL injection อีกต่อไป :)

P.S. พอดี capture รูปมาไม่ครบน่ะนะ แหะๆ

15 ความคิดเห็น:

dump กล่าวว่า...

อยากรู้ว่า suspend กับ movefile เนี่ยมันคือใช้ PendMoves v1.1 and MoveFile v1.0 รึเปล่าคับ ที่ลิงค์ไว้ให้อ่ะคับ

Trirat Puttaraksa กล่าวว่า...

movefile อยู่ใน PendMoves อยู่แล้วครับ นำไปใช้ได้เลย

สำหรับคำว่า suspend ผมหมายถึงทำการหยุดการทำงานของ winlogon.exe ครับ ซึ่งสามารถทำได้โดยใช้ Process Explorer ครับ click ขวาที่โปรเซสที่เราต้องการหยุด จากนั้นเลือก Suspend ครับ

ไม่ระบุชื่อ กล่าวว่า...

ของผม NOD32 มันขึ้นว่า
File:
c:\windows\system32\wvurqro.dll
Threat:
Win32/Adware.virtumonde application
Comment:
The file can be deleted. It is strongly recommended that you back up any crucial data before you proceed. Event occurred at an attempt to access the file by the application: \??\C:\WINDOWS\system32\winlogon.exe.

มันขั้นมาตลอดเลยอ่ะครับ ลบก็ลบไม่ได้คับ อย่างนี้ต้องทำไงเหรอคับ ...ขอบคุณคับ

Trirat Puttaraksa กล่าวว่า...

ขอบโทษครับที่ตอบช้า :) การที่ลบไฟล์ wvurqro.dll ไม่ได้นั้นเพราะ winlogon.exe ยังใช้งาน DLL ตัวนั้นอยู่ครับ ลบโดยตรงไม่ได้ ขอสรุปขั้นตอนเลยนะครับ

1. หยุดการทำงานของ winlogon.exe (เลือกที่ suspend โดยใช้โปรแกรม process explorer)
2. หา registry ที่ฝังตัวเรียก dll เหล่านี้ขึ้นมาทำงาน แล้วลบไป (หาโดยใช้ search ของ regedit)
3. schedule ให้ลบไฟล์ dll เหล่านั้นหลังจากที่เครื่อง reboot (ใช้โปรแกรมชื่อ movefile ที่โพสต์ไว้ข้างบน)
4. reboot ระบบครับ :)

fdtrinitron กล่าวว่า...

ขอโทษนะครับ แล้ว ไฟล์ .dll นี้ สามารถดูได้จากที่ไหนครับ ว่ามันกำลังทำงานอยู่

ขอบคุณครับ

Trirat Puttaraksa กล่าวว่า...

ตอบคุณ fdtrinitron ครับ

การจะดูว่าในโปรเซสหนึ่งๆมี DLL ไหนทำงานอยู่บ้าง ใช้โปรแกรม Process Explorer ดูได้ครับ พอเปิด Process Explorer ขึ้นมาให้เอาเม้าส์คลิกจากโปรเซสที่เราสนใจ จากนั้นไปที่ menu bar ครับ เลือก View -> Show Lower Pane (ข้างหน้าจะมีเครื่องหมายถูกขึ้นครับ) และเลือก View -> Lower Pane View เป็น DLLs ครับ ลองดูนะครับ

m กล่าวว่า...

สวัสดีครับผมโดนโปรแกรมชื่อ malware protector 2008 เล่นงาน พอจะมีวิธีแก้ไขได้อย่างไรบ้างครับ ขอบคุณครับ

m กล่าวว่า...

NOD32ตรวจเจอแบบนี้หมายความว่าอย่างไรครับ
File:
C:\WINDOWS\system32\byXNfExV.dll
Threat:
WIN32/Adware.Virtumonde application
Comment:
The file can be deleted. It is strongly recommended that you back up any crucial data before you proceed. Event occurred at an attempt to access the file by the application: C:\WINDOWS\system32\lsass.exe.
พอสั่ง delete ก็ไม่หายพอ restart ใหม่ก็กลับมาอีก รบกวนด้วยครับ ขอบคุณครับ

Trirat Puttaraksa กล่าวว่า...

ตอบคุณ M ครับ

ต้องขอโทษด้วยที่ก่อนหน้านั้นไม่ได้ตอบครับ เพราะกำลังหาข้อมูลอยู่ ส่วนข้อมูลใหม่ที่คุณ M ให้มานั้นคาดว่าเป็น DLL injection ครับ

แนวทางการแก้ไขคือให้รันโปรแกรม Autorun ของ sysinternals และค้นหาคำว่า wvurqro.dll แล้วลองลบข้อมูลที่เจอตรงนั้นทิ้งไป จากนั้นลอง restart ใหม่ครับ ถ้ายังกลับมาอีกแสดงว่ายังมีตัวโปรแกรมอีกตัว ที่คอยดึงเจ้าไฟล์ ตัวนี้ให้มันกลับมาอีกครับ ซึ่งก็ต้องว่ากันอีกทีหนึ่ง

Trirat Puttaraksa กล่าวว่า...

โอ๊ะๆ พิมพ์ผิดครับต้องเป็น byXNfExV.dll

m กล่าวว่า...

ขอโทษครับ การรันโปรแกรม Autorun ของ sysinternals ต้องทำอย่างไรครับ
ขอบคุณมากครับ

m กล่าวว่า...

สวัสดีครับ ทีแรกก็ยังไม่เข้าใจว่าทำ autorun ของ sysinternal คืออะไร ทำยังไง ก็เลยลองหาข้อมูลดูครับ และหลังจากที่ได้โหลดโปรแกรมมาลองดูแล้วปรากฎว่าไม่พบตัวที่ nod32 แจ้งเตือนครับ แล้วจะทำยังไงต่อดีครับ ขอบคุณครับ

Trirat Puttaraksa กล่าวว่า...

ถ้างั้นคงต้อง search หาใน registry โดยตรงแล้วครับ แล้วลองลิสต์ให้ผมดูว่าเจอที่ PATH ไหนบ้างครับ อย่างเพิ่งลบทันทีนะครับ registry บางตัวอาจจะสำคัญกับระบบครับ

P.S. ใช้ regedit ค้นหาครับ

P.S. ชื่อของ DLL อาจจะเปลี่ยนไปเรื่อยครับ ทางที่ดีเวลา search ให้ search ชื่อของ DLL ตัวล่าสุดที่ NOD32 เตือนครับ

m กล่าวว่า...

สวัสดีครับ ผมได้ลอง search ใน registry ก็พบครับอยู่ที่

My Computer\HKey_CLASS_ROOT\CLSID\{602F6DEE-611B-4599-930B-5895F3A76A41}\InprocServer32

NAME TYPE Data
ab(Default) REG_SZ C:\WINDOWS\system3\byXNfExV.dll

abThreadingModel REG_SZ Both

รบกวนด้วยนะครับ ว่าจะต้องทำอย่างไรต่อ ขอบคุณครับ

Trirat Puttaraksa กล่าวว่า...

ตอบคุณ m ครับ

เท่าที่ดู registry ดังกล่าว ลบไปไม่มีผลกระทบกับเครื่องครับ เป็น registry ของ activex ตัวหนึ่งเท่านั้น

ขั้นตอนหลังจากนี้แนะนำให้ลองลบ registry ตัวนี้ดูครับ จากนั้นปล่อยไว้สัก 5 วินาที แล้วลองกด F5 เพื่อ refresh ดูครับว่า registry นี้มันกลับมาใหม่รึเปล่า ถ้าไม่กลับมาให้รีบู้ตเครื่อง 1 ครั้งจากนั้นลองลบไฟล์ไวรัสดูครับ

แต่ถ้า registry นี้โผล่กลับมาใหม่ทั้งที่ลบไปแล้วแสดงว่ามีโปรแกรมบางตัวคอยตรวจสอบ registry ตัวนี้อยู่ ซึ่งก็ต้องมีขั้นตอนทำเพิ่มเพื่อหาโปรแกรมดังกล่าวอีกครับ

P.S. ลอง search หาดูด้วยนะครับ ว่ามี registry อื่นๆอีกรึเปล่าที่มีชื่อของไวรัสตัวนี้อยู่ มีความเป็นไปได้ว่าอาจจะมีมากกว่า 1 แห่งใน registry ครับ