ThaiCERT: Thai Computer Emergency Response Team
ศูนย์ประสานงานการรักษาความปลอดภัยคอมพิวเตอร์ ประเทศไทย 
 
 
 


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 ข้อที่ควรจดจำ นั่นก็คือ

  1. Arrival หมายความถึง วิธีการที่ worm กระทำต่อระบบ
  2. Departure: worm เคลื่อนที่ไปยังเครื่องเป้าหมายได้อย่างไร

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

  1. มีตัวอย่างและความรู้มากมายที่อธิบายว่า Outlook ทำงานอย่างไร เพียงคัดลอก source code ตาม website ต่างๆที่อธิบายถึง script ในการเข้าถึง Outlook ก็สามารถทำได้
  2. Outlook ง่ายสำหรับคนเขียนไวรัส
  3. Outlook มี method ที่มีความสามารถมากมายโดยผ่านทางการเขียน script คุณสามารถที่จะเข้าถึง address book และค้นหา email address รวมทั้งเข้าถึงโฟลเดอร์ต่างๆไม่ว่าจะเป็น inbox outbox sent folder

ต่อไปนี้เป็น 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)

Figure 1 VBS.LoveLetter's standard use of the Scripting.FileSystemObject.

การใช้ 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.