|
|
|||||||
Script-Based Mobile Threats
เรียบเรียงโดย : สัญญา คล่องในวัย
และ อรอุษา โอภาสมงคลชัย
Abstract
Microsoft ได้พัฒนาสิ่งแวดล้อมที่ยืดหยุ่นและมีประสิทธิภาพบน Platform ของ Window
32 bit การรวบรวมของภาษา Script มากมายควบคู่ไปกับการใช้ object เป็นการสร้าง application
อย่างเต็มประสิทธิภาพ ในทางกลับกันมันเป็นไปได้สำหรับคนที่ประสงค์ร้ายที่ใช้เทคโนโลยีที่เป็นประโยชน์เหล่านี้นำไปใช้ในทางที่ผิด
เช่น นำไปโจมตีระบบของผู้อื่นโดยการรัน script โดยการอ่านอีเมล์ หรือว่ารันไฟล์แนบซึ่งจะสามารถติดต่อไปถึงเครื่องของผู้อื่นได้โดยใช้
address ที่อยู่ใน address book
บทนำ
เอกสารฉบับนี้ได้กล่าวถึงวิธีการที่พวก worm หรือ virus ใช้ในการที่จะเข้าโจมตีระบบของผู้อื่น
ซึ่งมีหลายวิธี แต่ในที่นี้จะมุ่งไปที่การใช้ Object ต่างๆที่มีอยู่ใน windows
ในการเข้าโจมตี เช่น The Scripting.FileSystemObject, The Wscript.Shell , The
Wscript.Network object รวมทั้งการใช้ประโยชน์จากโปรแกรม Outlook express ซึ่งได้อธิบายถึงหน้าที่ของ
object ต่างๆเหล่านี้ว่าเกี่ยวข้องหรือควบคุมส่วนใดบ้าง รวมทั้งอธิบายถึง method
ต่างๆที่อยู่ใน object นั้นๆ
The Windows Scripting Host: วิธีการและการโจมตีระบบที่แท้จริง
ปัจจุบันนี้มีภาษา Script อยู่ 2 ภาษาที่เป็นที่นิยมอย่างแพร่หลายบนพื้นฐานของระบบปฎิบัติการ
Window นั่นก็คือ VBScript และ JavaScript ทั้งสองภาษานี้แทบจะเหมือนกันในเรื่องของความสามารถและ
syntax โดย Windows Scripting Host จะเป็นตัวตัดสินว่าส่วนของ Script ที่มีอยู่เป็นภาษาอะไรและจะเรียก
Interpreter ที่เหมาะสมขึ้นมาเพื่อทำการแปลภาษานั้น และด้วยหน้าที่ของ Windows
Scripting Host นี่เองจึงถือได้ว่าเป็นแหล่งรวมความเสียหายที่จะเกิดจากพวก Worm
ต่างๆ โดยพื้นฐานแล้วทั้ง VBScript และ JavaScript ไม่มีความสามารถที่จะเข้าโจมตีไฟล์ระบบ
, Registry หรือแม้กระทั่งโจมตี Outlook แต่มีความสามารถที่จะควบคุม COM object
และ ActiveX controls ที่อยู่บนระบบและก่อให้เกิดความวุ่นวายได
เพื่อเข้าใจพฤติกรรมของ Worm มีลักษณะพื้นฐานอยู่ 2 ข้อที่ควรจดจำ นั่นก็คือ
Arrival: จะประสบความสำเร็จเมื่อ script ถูก execute บนระบบของเหยื่อ
Departure: ส่วนมากจะแพร่กระจายโดยผ่านทาง Outlook ( เช่น Wscript.Kak และ VBS.Network ) Outlook object สามารถระบุ Outlook Address Book และควบคุมการส่งอีเมล์ ซึ่งหมายรวมถึงการส่งอีเมล์ที่มีไฟล์แนบไปด้วย worm สามารถแพร่กระจายโดยอาศัยข้อได้เปรียบของ Object นี้
Stand-alone script อย่างเช่น VBS.LoveLetter จะมาในรูปของไฟล์แนบ โดย script เหล่านี้ จะถูกเข้ารหัส ในการเข้ารหัสจะเปลี่ยน script ให้อยู่ในรูปแบบที่คล้ายๆกับการเข้ารหัสเลขฐานสองซึ่งสามารถเปลี่ยนกลับได้ในภายหลัง Stand-alone script นี้ต้องการผู้โชคร้ายที่จะมาเปิดดูหรือว่าเริ่มการทำงานของไฟล์ที่แนบไป
Embedded script เป็น script ที่ถูกฝังอยู่ใน HTML ซึ่งจะอยู่ที่ตัว web page หรือว่าอยู่ใน HTML email message ก็ได้ script นี้จะถูก execute ทันทีที่มันถูกมองดู ตัวอย่างเช่น script ที่ฝังอยู่ใน HTML email message จะถูก execute เมื่อเหยื่ออ่าน message นั้นๆ Embedded script สามารถที่จะถูกเข้ารหัสโดยการใช้เทคนิคที่ได้เคยอธิบายไว้ก่อนหน้านี้
Objects : แหล่งของพละกำลัง
โชคดีที่โดยพื้นฐานของภาษา script แล้วไม่สามารถที่จะทำอันตรายต่อระบบได้ เพื่อที่จะเข้าถึงและจัดการกับระบบปฏิบัติการจะต้องใช้
object ซึ่งระบบก็จะมีการป้องกันก่อนที่ script เหล่านั้นจะสามารถทำอันตรายได้
ก่อนที่ worm จะสามารถทำอะไรกับระบบ มันจะต้องสร้าง instance ของ object แล้วเรียก
method ที่อยู่ใน object นั้นเพื่อที่จะเริ่มต้นงานของมัน แต่ถ้า object ไม่ยินยอมในสิ่งที่
worm ต้องการ worm ก็จะหยุดและไม่สามารถทำอะไรได้
Object ที่ถูกใช้โดย worm มากที่สุด คือ the Scripting.FileSystemObject ( FSO ) object , the Wscript.Shell object , the Wscript.Network และ the Outlook.Application สาม object แรกจะปรากฏอยู่ในทุกเครื่องที่มีการรัน Windows Scripting host ส่วน the Outlook.Application object จะมีเฉพาะเครื่องที่มีการติดตั้ง Outlook express เท่านั้น
The Scripting.FileSystemObject
The Scripting.FileSystemObject (FSO) ให้ความสามารถในการเข้าถึงไฟล์ระบบ ประกอบไปด้วย
method มากมายในการจัดการกับระบบ ส่วนต่างๆมากมายที่เกี่ยวข้องในขั้นตอนการติดตั้ง
window เช่น window directory มากที่สุดของ script-based worms ใช้ object นี้
โดยอย่างน้อยที่สุดมันจะคัดลอกตัวของมันลงไปใน location ที่ระบุไว้ที่มันจะสามารถรันเวลาที่บูตเครื่องขึ้นมา
Method ต่างๆบาง method ใน object นี้
| BuildPath | |
| Close | ปิด TextStream file ที่เปิดไว้ |
| CopyFile | คัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่ง |
| CopyFolder | คัดลอกโฟลเดอร์จากที่หนึ่งไปยังอีกที่หนึ่ง |
| CreateFolder | สร้างโฟลเดอร์ |
| CreateTextFile | สร้างไฟล์ที่ระบุไว้และ return TextStream object ที่สามรถใช้อ่านหรือเขียนไฟล์ได้ |
| DeleteFile | ลบไฟล์ที่ระบุ |
| DeleteFolder | ลบโฟลเดอร์ที่ระบุรวมทั้งลบเนื้อหาทั้งหมดที่อยู่ในนั้น |
| DriveExists | Return true ถ้าไดรฟ็ที่ระบุไว้มีอยู่จริง และ return false ถ้าไม่มีไดรฟ์นั้นอยู่ |
| FileExists | Return true ถ้าไฟล์ที่ระบุไว้มีอยู่จริง และ return false ถ้าไม่มีไฟล์นั้นอยู่ |
| FolderExists | Return true ถ้าโฟลเดอร์ที่ระบุไว้มีอยู่จริง และ return false ถ้าไม่มีโฟลเดอร์นั้นอยู่ |
| GetAbsolutePathName | Return path ที่ชัดเจน |
| GetBaseName | Return String ที่เป็นชื่อของไฟล์หรือโฟลเดอร์ที่อยู่ใน path ที่ระบุ |
| GetDrive | Return Drive object ใน path ที่ระบุ |
| GetExtensionName | Return String ที่เป็นส่วนขยายสำหรับไฟล์ ที่ระบุไว้ใน path |
| GetFileName | Return ชื่อไฟล์หรือโฟลเดอร์สุดท้าย ของ path ที่ระบุเอาไว้ |
| GetFolder | Return Folder object ใน path ที่ระบุ |
| GetSpecialFolder | Retrun Folder ที่ถูกระบุ |
| GetTempName | Return ชื่อไฟล์หรือโฟลเดอร์ที่เป็น temporary file |
| Move | เคลื่อนย้ายไฟล์หรือโฟลเดอร์ |
| MoveFile | เคลื่อนย้ายไฟล์ |
| MoveFolder | เคลื่อนย้ายโฟลเดอร์ |
| OpenTextFile | เปิดไฟล์และ return TextStream object ที่สามารถที่จะใช้อ่าน เขียน หรือ เขียนต่อ |
| Read | อ่านจำนวนของอักขระที่กำหนดไว้โดยอ่านจาก TextStream และ Return String ที่อ่านได้นั้นๆ |
| ReadAll | อ่าน TextStream ทั้งหมด และ return string ที่อ่านได้ |
| ReadLine | อ่าน String แต่ละบรรทัดจาก TextStream (ไม่รวม newline character) และ return string ที่อ่านได้ |
| Remove | Remove key จาก Dictionary object |
| RemoveAll | Remove key ทั้งหมด จาก Dictionary object |
| Skip | ข้ามการอ่านจำนวนของ character ที่กำหนดไว้ เมื่ออ่านจาก TextStream |
| SkipLine | ข้ามการอ่านไปยังบรรทัดถัดไป เมื่ออ่านจาก TextStream |
| Write | เขียนข้อมูลลงใน TextStream |
| WriteLine | เขียนข้อมูลรวมทั้ง newline character ลงใน TextStream |
มีสิ่งสำคัญสิ่งหนึ่งเกี่ยวกับ FSO และไฟล์ที่มันอ่าน เขียน หรือ สร้าง : มันไม่ได้อยู่ในรูปของ
Text ถึงแม้ว่าเอกสารหรือตัวอย่างที่แสดงให้เราดูจะเป็น text พวกมันเป็นเพียง string
เท่านั้น string ใน script ประกอบไปด้วยค่าเลขฐานสองและสิ่งนี้นี่เองที่สามารถใช้อ่าน
เขียน binary file โดยความหมายนี้ script สามารถ execute .exe file script จะมีการเคลื่อนย้ายไปในโลกของ
exe ซึ่งขึ้นอยู่กับว่าเป็น worm หรือ virus
The WScript.Shell Object
จะเห็นว่า FSO นั้นเกี่ยวข้องกับไฟล์ระบบ แต่สำหรับ Wscript.Shell นั้นจะยุ่งเกี่ยวกับ
Registry
Method ต่างๆใน WScript.Shell มีดังนี้
| ConnectObject | Connect object ไปยังฟังก์ชันด้วย prefix ที่ให้ |
| CreateObject | สร้าง object ที่ระบุโดย strProgID parameter |
| CreateShortcut | สร้าง object ที่อ้างไปถึง shortcut หรือ URLshortcut |
| ExpandEnvironmentStrings | ขยายตัวแปรที่แวดล้อม PROCESS และ return string ผลลัพธ์ |
| RegDelete | ลบ key หรือ ค่า ออกจาก registry โดยต้องกำหนด key หรือ ค่าที่ลบนั้นๆไว้ในตัวแปร strName |
| RegRead | Return key หรือ ค่า จาก registry ที่เก็บไว้ในตัวแปร strName |
| RegWrite | เขียน key หรือ ค่าลงไปใน registry ซึ่งต้องมีการกำหนดไว้ใน strName ก่อน |
| Remove | ลบตัวแปรแวดล้อมที่กำหนดไว้ใน strName |
| Run | Execute process |
| Save | Save shortcut ให้ชี้ไปที่ตำแหน่งที่ระบุไว้ |
| SpecialFolders | เข้าถึงโฟลเดอร์ต่างๆของ window |
ด้วย Wscript.Shell virus/worm จะมีการเข้าถึง window registry โดยการเข้าไปตั้งค่าในส่วนของ HKLM\Software\Microsoft\Windows\CurrentVersion\Run ซึ่งเป็นที่ที่ worm แน่ใจว่ามันจะรันทุกครั้งเวลา boot เครื่อง และอาศัยความน่ากลัวของชื่อซึ่งมีผลดีต่อพวกมันคือคนอื่นไม่กล้าที่จะเข้าไปยุ่งกับregistry นี้
The Wscript.Network Object
เป็น object ที่เกี่ยวข้องกับการเชื่อมต่อเข้าสู่ระบบ network โดยเฉพาะ เช่น การ
mapped network drive เพราะว่ารูปแบบของ network drive อยู่ใน UNC และสามารถ mapped
โดยใช้ IP address การใช้ method นี้ worm สามารถแพร่กระจายโดยไม่จำเป็นต้องผ่านทาง
email ตัวอย่างของ worm ที่ใช้ object นี้ได้แก่ VBS.Network ซึ่งจะทำงานบนพื้นฐานของ
Windows 98 และ windows scripting host มันจะมองหา network drive และทำการแทรกตัวเพื่อเข้าโจมตีไดรฟ์นั้นๆ
Method ต่างๆใน Wscript.Network มีดังนี้
| EnumNetworkDrives | Return network drive mapping ปัจจุบัน |
| MapNetworkDrive | Mapped drive ที่กำหนดไว้จากที่หนึ่งไปยังอีกที่หนึ่ง |
| RemoveNetworkDrive | Remove network drive ที่ถูก map ไว้ |
Outlook ในฐานะที่เป็นเครื่องมือในการแพร่กระจาย
ทำไม Outlook ถึงเป็นโปรแกรมที่ได้รับความนิยมในการโจมตีของ worm
ต่อไปนี้เป็น code ตัวอย่างในการเข้าถึง address book ของ Outlook
| Sub RetrievePAB() Dim aPAB() As Variant Dim adl As Outlook.AddressList Dim e As Outlook.AddressEntry Dim i As Integer ReDim aPAB(100, 2) Set nsMAPI = ol.GetNamespace("MAPI") 'Return the personal address book. Set adl = nsMAPI.AddressLists("Personal Address Book") 'Loop through all entries in the PAB ' and fill an array with some properties. For Each e In adl.AddressEntries 'Display name in address book. aPAB(i, 0) = e.Name 'Actual e-mail address aPAB(i, 1) = e.Address 'Type of address ie. internet, CCMail, etc. aPAB(i, 2) = e.Type i =i +1 Next ReDim aPAB(i - 1, 2) End Sub |
กรณีศึกษา
VBS.LoveLetter มีแหล่งกำเนิดที่กรุงมนิลา เมืองหลวงของฟิลิปปินส์ และถูกส่งแพร่เข้าสู่คอมพิวเตอร์นับล้านเครื่องผ่านเครือข่ายอินเตอร์เน็ต
โดยผ่าน e-mail address โดยอาศัยรายชื่อใน Microsoft Outlook address book นอกจากอาศัยรายชื่อใน
Address Book แล้ว ไวรัสหนอนตัวนี้ยังแพร่ผ่าน Chatroom ของ IRC อีกด้วย ไฟล์ที่มีนามสกุลต่อไปนี้โดนเกาะด้วย
.vbs, .vbe, .js, .jse, .css, .wsh, .sct, .hta, .jpg, .jpeg, .wav, .txt, .gif,
.doc, .htm, .html, .xls, .ini, .bat, .com, .mp3, and .mp2. ไม่เพียงเท่านั้น
VBS.LoveLetter จะส่ง copy ของตัวมันเองไปยังทุกๆ local and network drives มันทำดังนี้เพื่อพยายามที่จะหลอกลวงว่าตัวเองเป็นไฟล์ที่สำคัญบางไฟล์ของผู้ใช้
ดังเช่น ไฟล์ที่ได้กล่าวถึงข้างบน
| Set fso = CreateObject("Scripting.FileSystemObject") set file = fso.OpenTextFile(Wscript.ScriptFullname,1) vbscopy=file.ReadAll Set dirwin = fso.GetSpecialFolder(0) |
การใช้ FSO and native string processing routine มันจะสามารถที่จะสร้าง HTML version ของตัวมันเอง
| set fso=CreateObject("Scripting.FileSystemObject") set c=fso.OpenTextFile(WScript.ScriptFullName,1) lines=Split(c.ReadAll,vbcrlf) l1=ubound(lines) for n=0 to ubound(lines) lines(n)=replace(lines(n),"'",chr(91)+chr(45)+chr(91)) lines(n)=replace(lines(n),"""",chr(93)+chr(45)+chr(93)) lines(n)=replace(lines(n),"\",chr(37)+chr(45)+chr(37)) . . . set b=fso.CreateTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM") set d=fso.OpenTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM",2) d.write dt5 |
Figure 2 VBS.LoveLetter HTML creation routine
และขั้นตอนสุดท้ายคือการแพร่กระจายโดยผ่านทาง Outlook express โดยอาศัย address ที่อยู่ใน address book และcopy ตัวเอง แล้วส่งเมล์ที่มีไฟล์แนบไปบัง email นั้นๆ
| set regedit=CreateObject("WScript.Shell") set out=WScript.CreateObject("Outlook.Application") set mapi=out.GetNameSpace("MAPI") for ctrlists=1 to mapi.AddressLists.Count . . . male.Subject = "ILOVEYOU" male.Body = vbcrlf&"kindly check the attached LOVELETTER coming from me." . . . regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead,1,"REG_DWORD" |
Figure 3 VBS.LoveLetter's use of the Outlook. Application and WScript.Shell objects.
สรุป
การศึกษาโครงสร้างของ object เหล่านี้ จะทำให้เรารู้ว่าหน้าที่ของ object นั้นๆเกี่ยวกับอะไรบ้าง
และถ้าหากมี virus หรือ worm บางชนิดหลงเข้ามาในระบบ เราสามารถที่จะดู source ของมันและทำให้คาดเดาได้ว่า
virus หรือ worm ชนิดนั้นๆจะโจมตีโดยใช้อะไรเป็นหลัก เช่น ใช้ไฟล์ระบบ หรือว่า
Registry ของ window เพี่อที่จะได้หาทางป้องกันต่อไป
บรรณานุกรม
http://www.symantec.com/avcenter/reference/script.based.mobile.threats.
pdf
http://www.ruencom.com/memo/memo0443/m080543.htm
| Home
|| เอกสารเผยแพร่ || Virus
ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved. |