Selasa, 28 Agustus 2007

How To Make Your Own (Portable) Anti Virus




Portable itu apa sih? menurut aq ya, portable itu bisa dibawa n digunain dimana2.. Kalo aplikasi yg portable gimana?


"A portable application, or portable app for short, is a software program that does not require any kind of formal installation onto a computer's permanent storage device to be executed, and can be stored on a removable storage device such as a CD-ROM, USB flash drive, flash card, or even a floppy disk, enabling it to be used on multiple computers."
sumber : wikipedia

Yups, berarti aplikasi tersebut bisa dijalankan tanpa harus diinstal terlebih dahulu di komputer yang menjalankanna... Lalu kalo Anti Virus dijadikan portable gimana? tentuna lebih efesien n manfaat, napa? soalna tidak perlu terinstall di komputer, jika sewaktu2 kita ingin menggunakanna di komputer lain bisa langsung dijalankan :) cucok buat yg suka nancepin Flashdisk ato HD External di komputer2 publik.

OK, apa aja yg diperluin untuk membuat suatu aplikasi yg portable? Berhubung karena tiap komputer itu beda spesifikasi hardware n software, maka perlu dicermati dalam pembuatan aplikasina juga. Misal, apakah di komputer yang akan dijalankan sudah tersedia file2 pendukung untuk aplikasi kita? Entah itu file DLL, OCX, atau lainna. Apakah spesifikasi hardwarena sama dengan komputer kita dimana development aplikasi dibuat? Untuk menghindari adana error atau tidak berjalanna aplikasi portable kita, lebih baik untuk memikirkan semua kemungkinan yg kira2 penting untuk berjalanna aplikasi kita nantina :)

Anti virus yang aq bikin menggunakan scanner statis dengan teknik checksum MD5. Disini aq sengaja gk pake rutin menghitung MD5 di dalam Anti Virus itu sendiri, melainkan memakai librari luar, yaitu aamd532.dll. untuk tampilan form menggunakan control Active-X Advanced Progress Bar, yaitu APB.ocx. Dan menggunakan control common dialog, yaitu comdlg32.ocx. Semua file librari external tersebut dijadikan sebah file Resource (RES) yg nanti akan dimasukkan kedalam aplikasi Anti Virus kita.

Secara garis besar, pada pertama kali run Anti Virus akan mengekstrak n menyalin file2 librari yg ada di "tubuhna" ke dalam direktori sistem dan menregister satu-persatu. Bisa diliat dari snippet kode berikut :

[code]
ekstrak GetSystemRoot & "\APB.OCX", 101
ekstrak GetSystemRoot & "\aamd532.dll", 102
ekstrak GetSystemRoot & "\comdlg32.OCX", 103
RegSvr32 GetSystemRoot & "\APB.OCX", False
RegSvr32 GetSystemRoot & "\aamd532.dll", False
RegSvr32 GetSystemRoot & "\comdlg32.OCX", False
[/code]
Rutin "ekstrak", "GetSystemRoot" dan "RegSvr32" dapat dilihat pada source code Anti Virus

Selanjutna, Anti Virus akan mengscan semua proses yg ada di memory terlebih dahulu. Hal ini dilakukan dengan :

[code]
Scanmem strDB, Form1.APB1, Form1.Label9, Form1.Label5, Form1.Label10, Form1.List1
[/code]
Objek label, APB dan listbox dapat dilihat pada source code Anti Virus

Setelah itu sang Anti Virus akan mengscan semua file yg ada di direktori dimana ia berada :

[code]
scanDir apPath
[/code]
Rutin "scanDir" dapat dilihat pada source code Anti Virus

Berhubung Anti Virus ini menggunakan scanner statis, maka diperlukan suatu database checksum MD5 yang berisi checksum dari file virus. Hal ini juga menjadi suatu kelemahan scanner statis :) File database yang digunakan bernama DB.DAT. Engine scanner statis ini dapat ditingkatkan kemampuanna sesuai dengan artikel sebelumna, "How To Make Your Own Anti Virus - Part 2".

Anti Virus ini dapat dijalankan secara otomatis pada flashdisk begitu flashdisk dimasukkan ke dalam komputer, dengan catatan autoplay pada komputer tersebut dinyalakan. Hal tsb dapat dilakukan dengan cara membuat file Autorun.inf pada root direktori flashdisk dan menambahkan kode berikut :

[code]
[Autorun]
open=nama_file_AV.exe
[/code]

Fitur yang dapat digunakan pada Anti Virus ini adalah pemeriksaan terhadap suatu file, pemeriksaan terhadap folder tertentu, pemeriksaan terhadap drive tertentu n penambahan checksum file yang dicurigai sebagai thread kedalam database checksum. Kecepatan penghitungan checksum MD5 terhadap suatu file pada Anti Virus ini dapat dikatakan cepat. Dengan catatan bahwa memory yang tersedia pada sistem komputer yang dijalankan memadai. Serta ukuranna yang relatif kecil, sehingga dapat dimasukkan kedalam disket :P Adapun kelemahan dari Anti Virus ini adalah penggunaan scanner statis yg kurang efesien n akurat. Untuk kelemahan2 lainna lom sempat ditemukan, dan diharapkan kelemahan2 yang akan ditemukan dapat diperbaiki serta ditingkatkan hingga optimal :)

Projek lengkap dapat diunduh di multikiller3-portable, Mirror

Source code APB.ocx, Mirror
Bila menemui dalam penggunaan file APB.ocx, harap source code APB.ocx di recompile terlebih dahulu

Saran n kritik terhadap aplikasi Anti Virus Portable sederhana ini sangat diharapkan :) :)

How To Make Your Own Anti Virus - Part 1



Shoutz : All echo|staff, yogyafree|staff, The Killer Team
Myztx, vaganci, ^family_code^, TOMMY, adhietslank, ^rumput_kering^, Hartono, etc.
#e-c-h-o, #yogyafree, #javahack, #koncek, #canda, #canda-ops @DAL.NET
newbie_hacker@yahoogroups.com, yogyafree@yahoogroups.com
IT_CENTER@yahoogroups.com, ProgrammerVB@yahoogroups.com
virus_baru@yahoogroups.com
VBbego.com, Virology.info, Vbtn.com
IA01 dan 1IA07, Lab MaDas angk. 19/2004 @ Gunadarma University
Dan teman2 serta kerabat2 lain yang tidak bisa disebutkan satu-persatu

Notes : - Penulis TIDAK bertanggung jawab atas penggunaan maupun penyalahgunaan dari artikel ini.
- Tujuan dibuat artikel HANYA untuk BAHAN PEMBELAJARAN saja.
- Penggunaan nama, merek, atau logo hanya sebagai CONTOH dan REFERENSI saja, TIDAK ada maksud
mempromosikan pihak tertentu.
- Penulis mohon maaf apabila seluruh/sebagian dari isi artikel ini sudah tersirat dalam
artikel sejenis lainnya.

Main#
Sekarang kehadiran para virus maker (--selanjutnya disingkat jadi VM saja) lokal telah membuat gerah
para user komputer tanah air. Bisa dibayangkan bila dari sekian banyak virus lokal tidak satu-dua
yang menghancurkan data (terutama bagi file office; word, excel, dll...).
Bagi para vendor Anti Virus (--selanjutnya disingkat menjadi AV saja) fenomena ini adalah lahan bisnis
untuk produk mereka. Sebut saja NORMAN, yang kini men-support perusahaan konsultan virus lokal (--VAKSIN.COM)
, Symantec, McAffe, NOD32, dan sebagainya. Dengan menawarkan update definisi software AV tercepat, engine
scanner paling sensitif, dan lain-lain merupakan kiat untuk memancing para korban virus membeli
dan menggunakan software AV mereka.
Bagi penulis sendiri hal ini memang agak memberatkan mengingat update file definisi atau engine AV tsb
haruslah melalui koneksi internet. Lalu bagaimana yang tidak mempunyai akses sama sekali? Konsekuensinya iyalah
tertinggal dalam hal pengenalan varian virus baru yang pada ujung-ujungnya membuat AV yang sudah terinstall
bagai 'Macan Ompong'.
Kalau kita membuat AV sendiri bagaimana? dengan database definisi yang bisa diupdate oleh kita bahkan dapat
saling tukar dengan teman? Bisa saja, dengan syarat mau mempelajari sedikit teknik pemograman :D.
Pertama kita harus mengerti bagaimana cara kerja sebuah AV sederhana, pada dasarnya sebuah software AV mempunyai
komponen-komponen :

1. Engine scanner, ini merupakan komponen utama AV dalam mengenali sebuah pattern virus. Engine ini dapat
dikelompokkan menjadi statis dan dinamis. Statis dalam hal ini dapat disebut menjadi spesifik terhadap
pattern tertentu dari sebuah file virus. Checksum merupakan salah satu contoh dari engine statis ini.
Dinamis dalam artian dia mengenali perilaku 'umum' sebuah virus. Heuristic menjadi salah satu contohnya.
2. Database definition, menjadi sebuah referensi dari sebuah pattern file virus. Engine statis sangat bergantung
kepada komponen ini.
3. Decompress atau unpacking engine, khusus untuk pengecekan file-file yang terkompresi (*.rar, *.zip, dll) atau
kompresi atau packing untuk file PE seperti UPX, MeW , dll.

Tidak jarang hasil dari pengecekan terhadap file suspect virus menghasilkan false-positive bahkan false-negative
(-- false-positive berarti file yang bersih dianggap thread oleh AV, dan false-negative berarti file yang 100% thread
akan dianggap bersih). Semua itu dapat diakibatkan oleh ketidak-sempurnaan dari engine scanner itu sendiri. Misal
pada contoh kasus Engine String scanner (--Engine scanner yang menyeleksi string-string dari file text-based), bila
diterapkan rule 3 out of 5 (-- bila AV menemukan 3 dari daftar 5 string kategori malicious) maka AV akan memberikan
bahwa file terindikasi sebuah thread yang positif. Padahal file tsb nyatanya tidak menimbulkan efek berbahaya bila
dijalankan atau dieksekusi. Kesalahan scanning macam ini lazim ditemukan untuk file-file *.VBS, *.HTML, dll.
Untuk penggunaan engine checksum sangat banyak ditemui di beberapa software AV lokal. Checksum yang lazim digunakan
diantaranya CRC16, CRC32, MD5, dll. Dikarenakan mudah untuk diimplementasikan. Engine ini sendiri bukannya tanpa cacat,
Checksum bekerja dengan memproses byte demi byte dari sebuah file dengan sebuah algoritma tertenu (-- tergantung dari
jenis checksum yang digunakan) sehingga menghasilkan sebuah format tertentu dari file tsb. Contoh checksum menggunakan
CRC32 dan MD5 :

* calCrc = CRC32(file_name_and_path)
* calMD5 = MD5(file_name_and_path)

Maka isi dari string calCrc adalah 7AF9E376, sedangkan untuk MD5nya adalah 529CA8050A00180790CF88B63468826A. Perlu diketahui
bila virus menerapkan rutin yang mengubah byte tertentu dari badan virus tsb setiap kali maka penggunaan engine checksum ini
akan kurang optimal karena bila 1 byte berubah dari file maka checksum juga akan berubah.

Mari kita belajar membuat sebuah AV sederhana, yang diperlukan :

1. Software Visual Basic 6.0
2. Sedikit pemahaman akan pemograman Visual Basic 6.0
3. Sampel file bersih atau virus (-- opsional)

First#
Sekarang kita akan belajar membuat sebuah rutin sederhana untuk :
- Memilih file yang akan dicek
- Membuka file tersebut dalam mode binary
- Memproses byte demi byte untuk menghasilkan Checksum

Buka MS-Visual Basic 6.0 anda, lalu buatlah sebuah class module dan Form dengan menambahkan sebuah objek Textbox, CommonDialog dan Command Button.
(Objek CommonDialog dapat ditambahkan dengan memilih Project -> COmponent atau Ctrl-T dan memilih Microsoft Common Dialog Control 6.0)
Ketikkan kode berikut pada class module (kita beri nama class module tsb clsCrc) :

================= START HERE ====================

Private crcTable(0 To 255) As Long 'crc32

Public Function CRC32(ByRef bArrayIn() As Byte, ByVal lLen As Long, Optional ByVal lcrc As Long = 0) As Long

'bArrayIn adalah array byte dari file yang dibaca, lLen adalah ukuran atau size file

Dim lCurPos As Long 'Current position untuk iterasi proses array bArrayIn
Dim lTemp As Long 'variabel temp hasil perhitungan

If lLen = 0 Then Exit Function 'keluar fungsi apabila ukuran file = 0
lTemp = lcrc Xor &HFFFFFFFF

For lCurPos = 0 To lLen
lTemp = (((lTemp And &HFFFFFF00) \ &H100) And &HFFFFFF) Xor (crcTable((lTemp And 255) Xor bArrayIn(lCurPos)))
Next lCurPos

CRC32 = lTemp Xor &HFFFFFFFF

End Function

Private Function BuildTable() As Boolean
Dim i As Long, x As Long, crc As Long
Const Limit = &HEDB88320

For i = 0 To 255
crc = i
For x = 0 To 7
If crc And 1 Then
crc = (((crc And &HFFFFFFFE) \ 2) And &H7FFFFFFF) Xor Limit
Else
crc = ((crc And &HFFFFFFFE) \ 2) And &H7FFFFFFF
End If
Next x
crcTable(i) = crc
Next i
End Function

Private Sub Class_Initialize()
BuildTable
End Sub


================= END HERE ====================

Lalu ketikkan kode berikut dalam event Command1_Click :

================= START HERE ====================

Dim namaFileBuka As String, HasilCrc As String
Dim CCrc As New clsCrc 'bikin objek baru dari class ClsCrc
Dim calCrc As Long
Dim tmp() As Byte 'array buat file yang dibaca

Private Sub Command1_Click()
CommonDialog1.CancelError = True 'error bila user mengklik cancel pada CommonDialog
CommonDialog1.DialogTitle = "Baca File" 'Caption commondialog

On Error GoTo erorhandle 'label error handle

CommonDialog1.ShowOpen
namafilbuka = CommonDialog1.FileName
Open namafilbuka For Binary Access Read As #1 'buka file yang dipilih dengan akses baca pada mode binary
ReDim tmp(LOF(1)) As Byte 'deklarasi ulang untuk array
Get #1, , tmp()
Close #1

calCrc = UBound(tmp) 'mengambil ukuran file dari array
calCrc = CCrc.CRC32(tmp, calCrc) 'hitung CRC

HasilCrc = Hex(calCrc) 'diubah ke format hexadesimal, karena hasil perhitungan dari class CRC masih berupa numeric
Text1.Text = HasilCrc 'tampilkan hasilnya
Exit Sub

erorhandle:
If Err.Number <> 32755 Then MsgBox Err.Description 'error number 32755 dalah bila user mengklik tombol cancel pada saat memilih file

================= END HERE ====================

COba anda jalankan program diatas dengan memencet tombol F5, lalu klik Command1 untuk memilih dan membuka file. Maka program akan
menampilkan CRC32nya.

Second#
Kode diatas dapat kita buat menjadi sebuah rutin pengecekan file suspect virus dengan antara membandingkan hasil
CRC32nya dan database CRC kita sendiri. Algoritmanya adalah :
- Memilih file yang akan dicek
- Membuka file tersebut dalam mode binary
- Memproses byte demi byte untuk menghasilkan Checksum
- Buka file database
- Ambil isi file baris demi baris
- Samakan Checksum hasil perhitungan dengan checksum dari file

Format file database dapat kita tentukan sendiri, misal :
- FluBurung.A=ABCDEFGH
- Diary.A=12345678
Dimana FluBurung.A adalah nama virus dan ABCDEFGH dalah Crc32nya. Jika kita mempunyai format file seperti diatas, maka kita perlu membaca
file secara sekuensial per baris serta memisahkan antara nama virus dan Crc32nya. Dalam hal ini yang menjadi pemisah adalah karakter '='.
Buat 1 module baru (-- diberi nama module1) lalu isi dengan kode :

================= START HERE ====================

Public namaVirus As String, CrcVirus As String 'deklarasi variabel global untuk nama dan CRC virus
Public pathExe as String 'deklarasi variabel penyimpan lokasi file EXE AV kita

Public Function cariDatabase(Crc As String, namaFileDB As String) As Boolean
Dim lineStr As String, tmp() As String 'variabel penampung untuk isi file
Open namaFileDB For Input As #1 'buka file dengan mode input
Do
Line Input #1, lineStr
tmp = Split(lineStr, "=") 'pisahkan isi file bedasarkan pemisah karakter '='
namaVirus = tmp(0) 'masukkan namavirus ke variabel dari array
CrcVirus = tmp(1) 'masukkan Crcvirus ke variabel dari array
If CrcVirus = Crc Then 'bila CRC perhitungan cocok/match dengan database
cariDatabase = True 'kembalikan nilai TRUE
Exit Do 'keluar dari perulangan
End If
Loop Until EOF(1)
Close #1
End Function

================= END HERE ====================

Lalu tambahkan 1 objek baru kedalam Form, yaitu Command button2. lalu ketikkan listing kode berikut kedalam event Command2_Click :

================= START HERE ====================
If Len(App.Path) <= 3 Then 'bila direktori kita adalah root direktori
pathEXE = App.Path
Else
pathEXE = App.Path & "\"
End If

CommonDialog1.CancelError = True 'error bila user mengklik cancel pada CommonDialog
CommonDialog1.DialogTitle = "Baca File" 'Caption commondialog

On Error GoTo erorhandle 'label error handle

CommonDialog1.ShowOpen
namafilbuka = CommonDialog1.FileName
Open namafilbuka For Binary Access Read As #1 'buka file yang dipilih dengan akses baca pada mode binary
ReDim tmp(LOF(1)) As Byte 'deklarasi ulang untuk array
Get #1, , tmp()
Close #1

calCrc = UBound(tmp) 'mengambil ukuran file dari array
calCrc = CCrc.CRC32(tmp, calCrc) 'hitung CRC

HasilCrc = Hex(calCrc) 'diubah ke format hexadesimal, karena hasil perhitungan dari class CRC masih berupa numeric
If cariDatabase(HasilCrc, pathEXE & "DB.txt") Then 'bila fungsi bernilai TRUE
MsgBox "Virus ditemukan : " & namaVirus 'tampilkan message Box
End If
Exit Sub

erorhandle:
If Err.Number <> 32755 Then MsgBox Err.Description 'error number 32755 dalah bila user mengklik tombol cancel pada saat memilih file

================= END HERE ====================

Fitur AV sederhana ini dapat ditambahkan dengan fitur process scanner, akses registry, real-time protection (RTP) dan lain lain. Untuk process
scanner pada dasarnya adalah teknik enumerasi seluruh proses yang sedang berjalan pada Sistem Operasi, lalu mencari letak atau lokasi file
dan melakukan proses scanning. Fitur akses registry memungkinkan kita untuk mengedit secara langsung registry windows apabila akses terhadap
registry (--Regedit) diblok oleh virus. Sedangkan fitur RTP memungkinkan AV kita berjalan secara simultan dengan windows explorer untuk mengscan
direktori atau file yang sedang kita browse atau lihat. Untuk ketiga fitur lanjutan ini akan dibahas pada artikel selanjutnya.

Kesimpulan#
Tidak harus membeli software AV yang mahal untuk menjaga komputer kita dari ancaman virus, kita bisa membuatnya sendiri dengan fitur-fitur yang
tak kalah bagusnya. Memang terdapat ketidaksempurnaan dalam AV buatan sendiri ini, tetapi setidaknya dapat dijadikan pencegah dari infeksi virus
komputer yang semakin merajalela. Software AV sederhana ini dilengkapi oleh engine scanner statis dan database definisi. Tidak tertutup kemungkinan
software AV ini ditingkatkan lebih advanced dalam hal engine scannernya.

Penutup#
Pengembangan software AV sederhana ini sepenuhnya Open-Source selama mengikutsertakan nama pembuat asli didalamnya. Listing serta projek lengkap dapat
didownload di Projek AV, Mirror

Senin, 27 Agustus 2007

Acara Ulang tahun Echo.or.id



Dalam rangka meningkatkan semangat berbagi dna belajar bersama maka di ulang tahunnya yang ke empat in Echo akan mengadakan beberapa kegiatan:

Nama : Ulang tahun Echo yang ke 4
Pelaksanaan
Tempat : Aula SMK N 26 Jakarta (ex. STM Pembangunan)
Jl. Balai Pustaka Baru I, Rawamangun, Jakarta Timur 13220
Tanggal : Minggu, 9 September 2007
Waktu : Pukul 09.00 - Selesai BBWI

Acara

Sesi Seminar dengan tema "Apakah Kamu dan Komputermu aman" ?
Speaker & Judul Materi :

* Jim Geovedi
materi : Latest Computer And Network Security Threats (0day)
(akan membahas info-info up-to-date tentang berbagai jenis ancaman dan serangan terhadap keamanan komputer dan jaringan saat ini)
* the_day (Dedi Dwianto)
materi: Protocol Tunneling : From Limited to Unlimited Acces
plus demo inet gratis dengan tunneling

Sesi Diskusi Panel:
* all Echo staff, moderator Jim Geovedi
materi : sejarah echo dan eksistensi echo

Sesi Pemotongan Tumpeng

Sesi Dikusi Bebas
Selama lebih kurang 45 menit, para peserta bisa bebas bertanya tentang semua hal di luar materi dan terkait dengan keamanan komputer dan jaringan.

Sesi launching Buku y3dips
Selama 15 menit, para peserta bisa mengetahui latar belakang pembuatan buku ini, serta diskon sebesar 20% untuk pembelian buku tersebut :)

Sesi hiburan
Akan di bagikan Door price berupa buku, kaos, pin dan merchandise lainnya

E.t.c
Di jual buku-buku keamanan (buku y3dips juga :P) yang bekerja sama dengan jasakom.com, kaos echoerz edisi khusus, PIN echo dsb

Kontribusi Peserta

Rp.45.000 untuk mahasiswa/pelajar
Rp.75.000 untuk umum

Fasilitas

- Makan Siang + Air Mineral
- untuk yang membawa hardisk external/usb bisa mengkopi materi plus dokumentasi lainnya.


Pendaftaran

- EMail Registration
Dengan format sebagai berikut :

============

To : ultah@echo.or.id
Subject : ultah echo REGISTRATION
BODY :

Ultah EcHo .

Full Name :
Nick :
Phone :
Email :

============


Apabila sudah Transfer silakan kirim email konfirmasi dengan format sebagai berikut

- Email Confirmation
Dengan format sebagai berikut :

============

To : ultah@echo.or.id
Subject : ultah echo CONFIRMATION
BODY :


Full Name :
No Rekening Asal :
No Rekening Tujuan :
Bank Mandiri Cabang RS. Harapan Kita
Rekening No : 116 000 4584 117
a/n Siska Kusumadewi
Jumlah Transfer :
Waktu Transfer :
============

- Transportasi & Peta Map+Transport Service


Regards;
echo|staff

Minggu, 26 Agustus 2007

Hack in BRAS Box



BRAS, Broadband Remote Access Server bertugas untuk mengroute lalu lintas data dari/ke DSLAM (Digital Subscriber Line Access Multiplexer) di suatu ISP. Berbagai fitur ada di BRAS, seperti IP QoS, ototenkasi, PPPoA, n dll. Kali ini aq nyoba "masuk" ke box sebuah BRAS ISP terkemuka di Indonesia :P.


OK, lets get it ON!! Seperti biasa, kita akan gathering informasi seputar target. Aq nyoba ngescan port yang terbuka pake Angry IP Scanner. Port yg discan : 21,22,23,2222,2323,80,8080.



Si target membuka port telnet, berarti kita coba konek dengan telnet.exe. Uuppss, ada passwordna, n aq gk tau ni :(.. Untuk itu kita coba crack dengan Brutus...



Yupsss, kita dapet passwordna :) hehehe, dalam masalah crack password (palagi dengan teknik brute-force) memang diperlukan kesabaran extra, soalna makin panjang password (> 6 karakter) perlu waktu lama...
Coba kita login yuk ke BRAS tsb...



Taraaaaaaaaaaa... kita dah masuk ke box si BRAS... mo ngapain ya? Humm, coba kita liat user yg valid disini ...



Weks, banyak juga nih.. hehehehe... coba kita liat sapa ajah account yang konek ke BRAS ini...



Dalam posting sebelumna yg membahas soal hijacking account ADSL, kayakna lebih gampangan lewat BRAS ini dah.. hehehehe langsung ke pusatna :P
trus apa ajah yg ada di sini selain diatas? banyaaakkkk bgt, dari konfigurasi jaringan (bisa kita liat lewat SNMP) ampe konfigurasi BRAS tsb. Untuk SNMP sengaja aq aktifkan di BRAS tsb, n akses lewat public-community :)



Wah mang rawan nih kalo diapa2in si BRAS.. dari bikin backdoor ampe MITMA mungkin bisa dilakukan disini :P hehehhe, semoga para ISP lebih bisa mengamankan infrastruktur mereka tuk meminimalkan serangan seperti ini :) :)

Your ADSL Modem : How Secure Is It?



Pernah ngalamin waktu konek ke internet dengan menggunakan koneksi ADSL, (lagi asik2 donlod :P) tiba2 putus koneksi? atau ingin konek ke internet tapi username n password anda ditolak? Humm, status modem OK, lampu ADSL nyala, lampu USB/Ethernet juga OK, Username n Password OK, kok gk mo konek!!!??? Nah lo! apa yang anda lakukan pertama kali? Angkat telpon n mulai mendial nomor telepon Customer Service ISP anda. Tetapi oleh sang "CS", diberitahu bahwa jaringan ADSL anda baik2 saja n sedang digunakan saat ini!??

Don't panic, mungkin anda termasuk salah satu (ato salah dua,tiga,empat, ... n) korban hijacking account ADSL. Kejadian ini bukanlah hal asing lagi, karena memang beberapa waktu lalu (atau bahkan saat ini masih) terjadi di berbagai kota. Aq gk tau angka pastina, tapi dengan tutorial atau pun eksperimen dewek, hampir semua orang bisa melakukanna.

"Gimana sih aq ko bisa kena?", sederhanana kita menggunakan modem untuk menghubungkan diri ke jaringan ADSL. Yups, modem ADSL (beberapa dah ada yg built-in router) mang banyak sekali jenisna. Dari china-manufactured ampe eropa-manufactured mungkin ada :P (bukan distibutor, jadi asal nyebut ajah :P). Pernahkah anda melihat-lihat atau mencoba fitur yang ada di modem ADSL anda? Salah satu fitur yang "wajib" ada di modem ADSL adalah Remote Management atau Web Management. Fitur ini memungkinkan kita mengakses modem secara remote/di luar jaringan lokal.

Nah itu dia permasalahanna, apakah fitur ini di modem anda sudah di non-aktifkan? bila belum, coba buka remote/web management dari browser anda. Masukkan IP/hostname modem anda (biasana sih IPna 192.168.1.1 atau 192.168.0.1, liat buku manual :P) lalu login dengan username n password yg ada di buku manual modem. Ubek2 si modem ampe nemu kata/kalimat "Enable/disable Remote/web management" atau sejenisna. Ya abis itu di non-aktifkan. Bila anda memang menggunakan fitur ini, ya tidak ada salahna untuk mengubah port default yg digunakan (biasana port 80 atau 8080). Jika tidak mengubah port ya ubahlah usernmae n password default modem anda :) :)

Aq ndiri juga pernah nemuin banyak modem ADSL yang masih bisa "terakses" dengan username n password defaultna. Apa yg bisa kita peroleh? dari username n password account ADSL hingga (mungkin) mengakses komputer yang ada di jaringan lokal mereka :)

Kalo account ADSL kita dah di tangan orang lain, wew bisa disalahgunakan (mungkin dipergunakan kata yg tepat :P). Tapi kayakna dengan adana hal semacam ini tentuna dari pihak ISP juga gk mau ketinggalan dunk, ya mereka bisa lebih "mengamankan" kustomer mereka. Misal dengan menerapkan sistem ototenkasi yang lebih ketat lagi :) :)

Struktur Program COM



#####################################
Dokumentasi asli ada di www.SROeR.org
"Chapter 1 : Struktur Program COM"
#####################################

Mengapa menggunakan bahasa Assembly?

1. Cepat, Lebih cepat dari compiler lainnya.
2. Lebih dekat dengan bahasa mesin, disebabkan bahasa Assembly dialamatkan
1:1 dengan bahasa mesin.
3. Kode yang dihasilkan lebih kecil dari compiler lainnya.
4. Dapat mengakses hardware lebih luas.

Compiler Assembly sudah banyak tersedia di internet, contohnya TASM (Turbo
Assembler), MASM (Microsoft Assembler), NASM (Netwide Assembler), dan lainlain.
Salah satu bentuk program yang dapat dihasilkan oleh compiler Assembly
adalah file COM. File COM adalah struktur program paling sederhana. Ada
beberapa syarat dalam pembuatan atau penggunaan file COM :

1. Kode dan data program harus tidak lebih besar dari 64 KB.
2. Tidak dapat memesan alamat memori melalui sistem operasi.

Contoh bentuk kode program COM, ketiklah di teks editor yang dapat
menghasilkan file ASCII murni seperti Notepad, vi, atau lainnya. Simpan
dengan nama COBAASM.ASM.
Versi TASM :
----------------------------------
ideal
p386n
model tiny
codeseg
org 100h
jmp start
;tempat data dan subrutin
start:
mov ax, 4c00h
int 21h
end
----------------------------------
Versi MASM :
----------------------------------
.386
.model tiny
.code
org 100h
entry:
jmp start
;tempat data dan subrutin
start:
mov ax, 4c00h
int 21h
end entry
----------------------------------

Compilelah dengan perintah TASM.EXE COBAASM.ASM lalu dikuti dengan perintah
TLINK.EXE /T COBAASM.OBJ jika menggunakan compiler TASM. Untuk compiler MASM
gunakan perintah ML COBAASM.ASM. Jika tak ada error maka akan terlihat
output seperti ini :

E:\PUSHM0~1\TASM3>tasm.exe cobaasm.asm
Turbo Assembler Version 3.0 Copyright (c) 1988, 1991 Borland
International
Assembling file: cobaasm.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 460k

File yang dihasilkan dari proses kompilasi adalah file OBJ. Untuk merubah
file OBJ ini menjadi sebuah file EXE atau COM kita perlu melakukan "linking"
dengan program linker. Disini kita menggunakan TLINK.exe.

E:\PUSHM0~1\TASM3>tlink.exe /t cobaasm.obj
Turbo Link Version 3.0 Copyright (c) 1987, 1990 Borland International

Argumen /t pada tlink.exe berarti kita ingin membuat file COM dari file .obj
yang dihasilkan oleh compiler. Sedangkan untuk membuat file EXE tidak perlu
mengikutkan argumen /t.
Jalankan program COM tersebut :

E:\PUSHM0~1\TASM3>cobaasm.com

Apa yang terjadi? Tentunya tidak terjadi apa-apa karena kita belum
menuliskan perintah untuk program tersebut. Jadi program cobaasm.com
tersebut hanya diload ke memory lalu terminate dengan sendirinya.
Apa sih arti dari kode-kode diatas? lalu apa perbedaan antara kode yang
ditulis untuk compiler TASM dengan MASM?
berikut adalah penjelasan lengkapnya...

1. Perintah "ideal" berarti kita menggunakan syntax ideal dalam compiler
TASM.
2. Perintah "p386n" atau ".386" berarti kita menggunakan intruksi prosesor
80386.
3. Perintah "model tiny" atau ".tiny" berarti kita ingin menggunakan
format file COM.
4. Perintah "codeseg" atau ".code" adalah awal dari kode program kita.
5. Perintah "org 100h" berarti program kita akan dimulai dari offset 100h.
6. Dalam compiler MASM kita perlu mendeklarasikan entry point untuk
program, disini kita gunakan label "entry:".
Perlu diketahui kalau deklarasi sebuah label : "nama_label:".
7. Program COM selalu diawali dengan "peloncatan" atau "jump" ke awal kode
program. Perintah yang digunakan adalah “jmp" diikuti dengan nama
label, misalnya "start". Bila diperhatikan, diantara perintah "jmp
start" dan label "start" adalah tempat dimana kita bisa deklarasikan
variabel-variabel ataupun data-data yang digunakan dalam program kita.
8. Untuk mengakhiri jalannya program, kita perlu membuat suatu perintah.
Perintah "end" atau "end entry" disini hanya menunjukkan akhir dari
kode program, bukan untuk MENGAKHIRI proses. 2 perintah yang digunakan
adalah :

MOV AX, 4c00h
int 21h

Perintah MOV adalah perintah untuk menyalin isi data atau register ke
suatu register lain. Bentuk umum perintah MOV :

MOV tujuan_salin, asal_salin

Pada perintah diatas kita akan menyalin atau lebih tepatnya "mengisi"
register AX (lebih dikenal dengan register akumulator 16 bit) dengan
bilangan heksa 4c00.
Sedangkan perintah INT 21h berarti kita menjalankan interrupt sistem
dengan fungsi 21h.

ActiveX-DLL with ASP



Shoutz : All echo|staff, yogyafree|staff, The Killer Team
Myztx, vaganci, ^family_code^, TOMMY, adhietslank, ^rumput_kering^, Hartono, etc.
#e-c-h-o, #yogyafree, #javahack, #koncek, #canda, #canda-ops @DAL.NET
newbie_hacker@yahoogroups.com, yogyafree@yahoogroups.com
IT_CENTER@yahoogroups.com, ProgrammerVB@yahoogroups.com
virus_baru@yahoogroups.com
VB-bego.com, Virology.info, Vbtn.com
IA01 dan 1IA07, Lab MaDas angk. 19/2004 @ Gunadarma University
Dan teman2 serta kerabat2 lain yang tidak bisa disebutkan satu-persatu

Notes : - Penulis TIDAK bertanggung jawab atas penggunaan maupun penyalahgunaan dari artikel ini.
- Tujuan dibuat artikel HANYA untuk BAHAN PEMBELAJARAN saja.
- Penggunaan nama, merek, atau logo hanya sebagai CONTOH dan REFERENSI saja, TIDAK ada maksud
mempromosikan pihak tertentu.
- Penulis mohon maaf apabila seluruh/sebagian dari isi artikel ini sudah tersirat dalam
artikel sejenis lainnya.

Main#
ASP atau Active Server Pages adalah produk server-side scripting yang dikeluarkan oleh Microsoft Corporation.
Terdapat beberapa perbedaan antara ASP dengan server-side scripting lainnya, diantaranya :

- Lisensi, seperti yang diketahui ASP adalah bersifat proprietary.
- Distribusi, ASP hanya dapat dijalankan di sistem operasi windows dengan IIS yang terinstall didalamnya.
Walaupun dapat dijalankan di linux/unix dengan Chilisoft ASP, tidak dapat selancar bila di windows.
- Penggunaan COM object yang kental, salah satu keunggulan ASP adalah kekayaannya dalam integrasi dengan COM
Object dalam kinerjanya.
- Dapat berkolaborasi dengan script lainnya, seperti VBScript, JScript, PerlScript, PyhonScript, dan lainnya.
- Dominan memakai ADO dalam konektivitas databasenya.

Dalam perkembangannya, saat ini ASP sudah mengimplementasikan konsep .NET didalamnya. Berikut adalah sejarah singkat
dari perkembangan ASP :

- ASP version 1.0 (distributed with IIS 3.0) , Desember 1996,
- ASP version 2.0 (distributed with IIS 4.0) , September 1997,
- ASP version 3.0 (distributed with IIS 5.0) , November 2000,
- ASP.NET version 1.0 (part of the Microsoft .NET platform) , Januari 2002
- ASP.NET version 1.1 , April 2003
- ASP.NET version 2.0 , November 7 2005)

Pada artikel ini akan dijelaskan bagaimana membuat dan mengimplementasikan ActiveX DLL di halaman ASP. Mengapa menggunakan
ActiveX DLL? Karena komponen tersebut dapat diubah dan dibuat dengan mudah, tentunya jika diimbangi dengan pengetahuan pemograman
yang baik. Secara umumnya, pengaksesan komponen ActiveX DLL dari script ASP adalah :

set obj = Server.createobject(object/file_name.classname)

Objectname adalah nama object/file yang sudah teregistrasi di windows sebelumnya, dan classname adalah nama class dari object
tersebut. Sedangkan untuk pengaksesan fungsi atau method yang ada di object tersebut adalah :

obj.methodname(param)

Param adalah parameter masukan untuk fungsi.

How to build#
Dalam membuat komponen ActiveX untuk ASP perlu diperhatikan hal-hal sebagai berikut :

- Privilege atau hak akses. Jika komponen ActiveX perlu menjalankan suatu program, menghapus/membuat file dan kegiatan akses sistem
lainnya, perlu konfigurasi privilege yang baik. Karena jika tidak maka akan terjadi penolakan hak akses dari sistem operasi.
- Run-time, pada saat eksekusi komponen ActiveX maka komponen tersebut akan diload oleh IIS Worker Process atau w3wp.exe. Maka bila
terjadi kesalahan atau kondisi dimana komponen tidak respon, diperlukan penanganan seperti merestart service IIS guna membuka
handle ke file ActiveX DLL tsb.
- Registrasi komponen, registrasi komponen dengan menggunakan tools regsvr32.exe diperlukan agar IIS dapat mengetahui komponen yang
akan dijalankannya. Registrasi dapat dilakukan dengan cara mengetikkan : regsvr32.exe [path/nama DLL] pada kotak Run dan untuk unregister
komponen dengan cara : regsvr32.exe /u [path/nama DLL].

Selanjutnya kita akan membuat contoh komponen ActiveX yang sederhana dengan bahasa pemograman Visual Basic 6.0. Untuk memilih pembuatan ActiveX,
dapat dilakukan dengan cara memilih jenis projek pada jendela pilihan projek. Pilihlah projek New ActiveX DLL. Maka akan tersaji 1 buah class kosong
yang siap digunakan. Perlu diketahui bahwa pengaturan properties class Instancing harus diset ke nilai 5 atau MultiUse. Berikut adalah contoh fungsi
yang akan mengembalikan nilai perhitungan aritmatika :

------------------ START COPy FROM HERE ------------------

Public Function hitung(ByRef x As Integer, ByRef y As Integer) As Integer
hitung = (x + y) * 2
End Function

------------------ STOP COPy FROM HERE ------------------

Lalu simpanlah projek dengan nama coba.vbp dan nama class dengan nama hitung1.cls. Lalu buatlah komponen ActiveX dari projek tersebut dengan memilih
menu File -> Make Coba.dll dari toolbar. Registrasi komponen tersebut dengan command dari kotak Run : Regsvr32.exe coba.dll. Buatlah file ASP berikut
ini :


------------------ START COPy FROM HERE ------------------

<%
dim hasil
set obj = Server.createobject("coba.hitung1")
hasil = obj.hitung(1,2)
Response.Write hasil
%>

------------------ STOP COPy FROM HERE ------------------

Lalu jalankanlah dari browser anda, maka akan terlihat bahwa tercetak angka "6" dari hasil perhitungan fungsi hitung. Memang terlihat masih sangat sederhana,
tetapi komponen ActiveX dapat dibuat dan digunakan untuk keperluan yang sangat banyak, Seperti perhitungan matematis yang rumit, prosedur Pengecekan Anti-Virus,
mengirimkan email secara otomatis, dan lain sebagainya.
Disamping kemudahan menggunakan komponen ActiveX dalam ASP, juga terdapat kekurangannya yaitu pemanggilan fungsi/method dari object diperlukan waktu yang lama.
Bahkan untuk membuat object itu sendiri juga diperlukan waktu yang lama. Berikut adalah tabel perbandingan antara waktu eksekusi VBS, JS dan VB :

Time taken by same code in VB/VBS/JS [misc].

VB Code VBS JS VB5
Application("A2"), 0items 35 54 7
Application("A4"), 1000items 42 65 15
request.querystring 124 8
request.querystring("A") 176 161 47
request.querystring.Item("A") 210 205 47
request.servervariables("HTTP_REFERER")177 175 55
request.ServerVariables("REMOTE_ADDR") 205 175 74
request.servervariables("X") 224 226 95
request.servervariables("HTTP_COOKIE") 318 109
request.cookies("AAA") 165 160 47
request.totalbytes 61 61 3
A = X & "AAAA" 4.6 1.7
A = "" & Now() 40.7 29.3
D = Now 10.8 9.8
A = FormatNumber(5.5,2) 17.6
A = Format(5.5, "0.00") 52.4
A = Left(X,2) 5.8 1.7
D = InStr(X, "bb") 4.4 1.4
Call sub 7.4 1.4
CreateObject("ADODB.Connection") 1110 471
CreateObject("ADODB.Recordset") 751 83
CreateObject("Scripting.Dictionary") 590 257
CreateObject("Scripting.FSO") 350 27

Penggunaan memory juga mempengaruhi kinerja dari ASP. ASP mempunyai karakteristik menyimpan file include di dalam memory setiap dipanggil. Jadi bila
Terdapat banyak file include, maka akan membebani sistem itu sendiri. Contohnya bila terdapat 100 kB file include dan tiap byte dari file tersbut memakan
3 byte di memory dan file tersbut di include ke dalam 100 file ASP, maka 100 * 3 * 100 = 30 MB jumlah memory yang digunakan.
Sedangkan pada penggunaan komponen ActiveX pada ASP akan sedikit menguntungkan, karena komponen akan terus di memory begitu ia diload atau di eksekusi
hingga di bebaskan kembali oleh IIS.

Penutup#
Penggunaan komponen ActiveX di halaman ASP sangat mudah dibuat dan diimpelemntasikan. Komponen ActiveX dapat mmebaut konten web lebih dinamis dan membantu
perhitungan matematis bila diperlukan. Penggunaan komponen ActiveX juga terdapat kelemahannya, seperti pembuatan dan pemanggilan object yang cukup memakan waktu.

Referensi#
http://en.wikipedia.org/wiki/Active_Server_Pages
http://www.motobit.com/tips/detpg_DLLinclude/
http://www.planet-source-code.com/
http://support.microsoft.com/kb/249873
http://www.google.co.id/

How To Make Your Own Anti Virus - Part 2



Shoutz : All echo|staff, yogyafree|staff, The Killer Team
Myztx, vaganci, ^family_code^, TOMMY, adhietslank, ^rumput_kering^, Hartono, etc.
#e-c-h-o, #yogyafree, #javahack, #koncek, #canda, #canda-ops @DAL.NET
newbie_hacker@yahoogroups.com, yogyafree@yahoogroups.com
IT_CENTER@yahoogroups.com, ProgrammerVB@yahoogroups.com
virus_baru@yahoogroups.com
VB-bego.com, Virology.info, Vbtn.com
IA01 dan 1IA07, Lab MaDas angk. 19/2004 @ Gunadarma University
Dan teman2 serta kerabat2 lain yang tidak bisa disebutkan satu-persatu

Notes : - Penulis TIDAK bertanggung jawab atas penggunaan maupun penyalahgunaan dari artikel ini.
- Tujuan dibuat artikel HANYA untuk BAHAN PEMBELAJARAN saja.
- Penggunaan nama, merek, atau logo hanya sebagai CONTOH dan REFERENSI saja, TIDAK ada maksud
mempromosikan pihak tertentu.
- Penulis mohon maaf apabila seluruh/sebagian dari isi artikel ini sudah tersirat dalam
artikel sejenis lainnya.

Main#
Pada artikel terdahulu penulis sudah membahas tentang bagaimana engine scanner statis bekerja secara umum. Seperti yang
diketahui, scanner statis akan mendeteksi sebuah malware atau thread berdasarkan hasil checksum dari file tersebut. Tetapi
teknik ini tidak akan efesien apabila diterapkan pada malware yang sudah mengimplementasikan teknik polymorph. teknik Polymorph
secara umum adalah teknik mereplikasi diri dan tiap signature replikanya berbeda satu sama lain.
Dalam beberapa kasus virus lokal sudah ditemukan penggunaan teknik polymorph. Baik itu secara sederhana maupun kompleks. Cara
yang biasa digunakan yaitu :

- Merubah atau mengenkripsi nama variabel dan string
- Menambah atau mengurangi byte-byte tertentu dalam diri virus
- Menggunakan engine polymorph tertentu

Untuk kasus yang menggunakan teknik enkripsi, tidak semua jenis enkripsi dapat didekripsi oleh engine Antivirus. Perlu analisa
dengan menggunakan reverse-engineering yang mendalam guna memahami teknik enkripsi yang dipakai.
Pada penulisan berikut akan dijelaskan bagaimana membuat scanner statis yg bisa mengenali thread secara lebih baik dari yang terdahulu
Ada baiknya kita mengenal terlebih dahulu format file PE (Portable Executable) pada Windows.
Format File PE mulai dikenalkan pada Windows NT 3.1, dimana format file ini masih menyimpan header MZ dari MS-DOS. Berikut skema dasar
format file PE :

|----------------------------|
| CodeView Debug Information |
|----------------------------|
| COFF Symbols |
|----------------------------|
| COFF Line Numbers |
|----------------------------|
| Section - n |
| . |
| . |
| Section - 2 |
|----------------------------|
| Section - 1 |
|----------------------------|
| Section - 0 |
|----------------------------|
| Array Section table |
| . |
| . |
| Array Section table |
|----------------------------|
| Data Directory |
|----------------------------|
| |
|----------------------------|
| Image File Header |
|----------------------------|
| "PE\0\0" |
|----------------------------|
| "MZ" |
|----------------------------|

$PE Header
PE Header merupakan salah satu struktur dari IMAGE_NT_HEADER (dideklarasikan dalam WINNT.H). Header ini mengandung berbagai macam jenis
informasi seperti lokasi dan ukuran dari area kode dan data, system operasi yang dipakai, ukuran stack, dan lain-lain.
Header ini juga mengandung MS-DOS stub, yaitu program kecil yang akan menampilkan teks "This program cannot be run in MS-DOS mode." bila
file PE dijalankan di lingkungan yang tidak mendukung Win32. PE Header Terdiri dari struktur :

DWORD Signature;
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER OptionalHeader;

Dimana Signature adalah teks "PE\0\0". Sedangkan IMAGE_FILE_HEADER berisi struktur :

WORD Machine //Berisi nilai untuk jenis CPU yang dipakai, ex : 0x14d untuk Intel i860
WORD NumberOfSections //Berisi jumlah section yang ada di file PE
DWORD TimeDateStamp //Berisi tanggal kapan linker (atau compiler untuk File OBJ) memproduksi file PE
DWORD PointerToSymbolTable //Offset untuk tabel symbol COFF
DWORD NumberOfSymbols //Berisi jumlah symbol COFF di tabel
WORD SizeOfOptionalHeader //Berisi ukuran dari optional header
WORD Characteristics //Berisi informasi tentang file PE

Untuk IMAGE_OPTIONAL_HEADER berisi :

WORD Magic //Selalu bernilai 0x010B
BYTE MajorLinkerVersion //Versi linker yang dipakai
BYTE MinorLinkerVersion //Versi linker yang dipakai
DWORD SizeOfCode //Ukuran dari section code
DWORD SizeOfInitializedData //Ukuran dari semua data section yang terinisialisasi
DWORD SizeOfUninitializedData //Ukuran dari semua data section yang tidak terinisialisasi
DWORD AddressOfEntryPoint //Alamat dimana loader akan memulai eksekusi file PE, alamat ini adalah RVA (Relative Virtual Address)
DWORD BaseOfCode //Alamat RVA dimana section code dimulai
DWORD BaseOfData //Alamat RVA dimana section data dimulai
DWORD ImageBase //Alamat dimana file PE akan dimapping di memory
DWORD SectionAlignment //Nilai penggandaan untuk mapping tiap section di memory
DWORD FileAlignment //Nilai penggandaan untuk mapping tiap section di disk
WORD MajorOperatingSystemVersion //Versi OS yang dipakai
WORD MinorOperatingSystemVersion //Versi OS yang dipakai
WORD MajorSubsystemVersion //Versi minimum OS yang dipakai
WORD MinorSubsystemVersion //Versi minimum OS yang dipakai
DWORD Reserved1 //Selalu bernilai 0
DWORD SizeOfImage //Ukuran dari image yang akan diload oleh loader
DWORD SizeOfHeaders //Ukuran dari PE Header dan tabel section
DWORD CheckSum //Nilai checksum CRC dari file PE
WORD Subsystem //Tipe subsistem yang diperlukan untuk keperluan GUI
WORD DllCharacteristics //Tanda atau flag untuk inisialisasi DLL (Dynamic Link Library)
DWORD SizeOfStackReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfStackCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi stack
DWORD SizeOfHeapReserve //Ukuran dari virtual memory yang akan digunakan untuk inisialisasi heap proses
DWORD SizeOfHeapCommit //Ukuran dari memory yang akan digunakan untuk inisialisasi heap proses
DWORD LoaderFlags //Digunakan untuk keperluan debugging
DWORD NumberOfRvaAndSizes //Jumlah dari array DataDirectory

$Tabel Section
Secara umum Tabel Section dapat dianalogikan sebagai "daftar" untuk tiap section yang ada di file PE. Tabel ini mencakup informasi
tentang section-section file PE. berikut contoh layout dari tabel section file PE yang sudah di dump :

01 .text VirtSize: 00005AFA VirtAddr: 00001000
raw data offs: 00000400 raw data size: 00005C00
relocation offs: 00000000 relocations: 00000000
line # offs: 00009220 line #'s: 0000020C
characteristics: 60000020
CODE MEM_EXECUTE MEM_READ

02 .bss VirtSize: 00001438 VirtAddr: 00007000
raw data offs: 00000000 raw data size: 00001600
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #'s: 00000000
characteristics: C0000080
UNINITIALIZED_DATA MEM_READ MEM_WRITE

03 .rdata VirtSize: 0000015C VirtAddr: 00009000
raw data offs: 00006000 raw data size: 00000200
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #'s: 00000000
characteristics: 40000040
INITIALIZED_DATA MEM_READ

04 .data VirtSize: 0000239C VirtAddr: 0000A000
raw data offs: 00006200 raw data size: 00002400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #'s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE

05 .idata VirtSize: 0000033E VirtAddr: 0000D000
raw data offs: 00008600 raw data size: 00000400
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #'s: 00000000
characteristics: C0000040
INITIALIZED_DATA MEM_READ MEM_WRITE

06 .reloc VirtSize: 000006CE VirtAddr: 0000E000
raw data offs: 00008A00 raw data size: 00000800
relocation offs: 00000000 relocations: 00000000
line # offs: 00000000 line #'s: 00000000
characteristics: 42000040
INITIALIZED_DATA MEM_DISCARDABLE MEM_READ

Layout diatas adalah format dari IMAGE_SECTION_HEADER, Berikut keterangan tentang IMAGE_SECTION_HEADER :

BYTE Name[IMAGE_SIZEOF_SHORT_NAME] //Nama section, biasanya diawali dengan tanda titik/dot
union { //Nilai sesungguhnya dari ukuran kode atau data
DWORD PhysicalAddress
DWORD VirtualSize
} Misc;
DWORD VirtualAddress //Alamat RVA untuk keperluan mapping oleh loader
DWORD SizeOfRawData //Ukuran dari section setelah dibulatkan ke ukuran file alignment
DWORD PointerToRawData //Offset dari section
DWORD PointerToRelocations //Offset untuk informasi relokasi section
DWORD PointerToLinenumbers //Offset untuk nomor baris (line number)
WORD NumberOfRelocations //Jumlah dari relokasi yang ada di tabel relokasi
WORD NumberOfLinenumbers //Jumlah dari nomor baris yang ada di tabel nomor baris
DWORD Characteristics //Berisi angka tertentu yang menunjukkan atribut dari suatu section (data, kode, dll)

How to build#
Untuk membangun suatu scanner statis yang dapat memetakan (mapping) dan mengambil sebagian sectionnya utnuk dianalisa
, perlu diketahui terlebih dahulu hal-hal berikut :

- What's section? Berhubung section yang dimiliki oleh suatu file PE beragam jumlah dan isinya, kita perlu mengetahui section
keberapa dan apa isinya sebelum di analisa atau di dump. Pengidentifikasian tiap section dapat dilakukan dengan cara menganalisis
karakteristik file PE tersebut.
- Is it packed/compressed or not? Kadang para pembuat aplikasi perlu memproteksi atau mengecilkan ukuran file PE mereka
dengan cara menggunakan packer/compressor. Hal ini sangat berpengaruh dalam pengidentifikasian section, karena seringkali packer
/compressor membuat section dummy dalam file PE yang dihasilkan.

Bahasa pemograman yang digunakan adalah Visual Basic 6.0. sedangkan Projek yang akan dibuat adalah ActiveX DLL (Dynamic Link Library),
sehingga dapat digunakan oleh aplikasi lain. Referensi tentang File DLL dapat dilihat dibagian akhir artikel ini.
Section yang akan diambil adalah data atau code section, dengan mengasumsikan section tersebut berada di urutan kedua maka Section tersebut
seharusnya memiliki nama ".data". Berikut adalah flowchart sederhana dari DLL yang akan dibuat :

|Start|
|
|
|Input File|
|
|

|y
|
|Mapping tabel section|
|
|

|y
|
|Dapatkan size dan offsetnya|
|
|
|ambil checksum dari byte section tsb|
|
|
|End|

Untuk fungsi pengambilan checksum dapat menggunakan teknik CRC ataupun MD5. Khusus utnuk teknik CRC dapat ditemui pada artikel sebelumnya.
Sedangkan untuk teknik MD5 dapat menggunakan file aamd532.dll yang ada di file projek artikel ini.
Berikut ini adalah contoh sederhana Activex DLLnya :

------------------ START COPy FROM HERE ------------------
'Jenis Projek : Activex DLL
'Nama file Class : Class1.cls

Private Type IMAGEDOSHEADER
e_magic As String * 2
e_cblp As Integer
e_cp As Integer
e_crlc As Integer
e_cparhdr As Integer
e_minalloc As Integer
e_maxalloc As Integer
e_ss As Integer
e_sp As Integer
e_csum As Integer
e_ip As Integer
e_cs As Integer
e_lfarlc As Integer
e_ovno As Integer
e_res(1 To 4) As Integer
e_oemid As Integer
e_oeminfo As Integer
e_res2(1 To 10) As Integer
e_lfanew As Long
End Type

Private Type IMAGE_SECTION_HEADER
nameSec As String * 6
PhisicalAddress As Integer
VirtualSize As Long
VirtualAddress As Long
SizeOfRawData As Long
PointerToRawData As Long
PointerToRelocations As Long
PointerToLinenumbers As Long
NumberOfRelocations As Integer
NumberOfLinenumbers As Integer
Characteristics As Long

End Type

Private Type IMAGE_FILE_HEADER
Machine As Integer
NumberOfSections As Integer
TimeDateStamp As Long
PointerToSymbolTable As Long
NumberOfSymbols As Long
SizeOfOptionalHeader As Integer
Characteristics As Integer
End Type

Private Type IMAGE_DATA_DIRECTORY
VirtualAddress As Long
size As Long
End Type


Private Type IMAGE_OPTIONAL_HEADER
Magic As Integer
MajorLinkerVersion As Byte
MinorLinkerVersion As Byte
SizeOfCode As Long
SizeOfInitializedData As Long
SizeOfUninitializedData As Long
AddressOfEntryPoint As Long
BaseOfCode As Long
BaseOfData As Long
ImageBase As Long
SectionAlignment As Long
FileAlignment As Long
MajorOperatingSystemVersion As Integer
MinorOperatingSystemVersion As Integer
MajorImageVersion As Integer
MinorImageVersion As Integer
MajorSubsystemVersion As Integer
MinorSubsystemVersion As Integer
Win32VersionValue As Long
SizeOfImage As Long
SizeOfHeaders As Long
CheckSum As Long
Subsystem As Integer
DllCharacteristics As Integer
SizeOfStackReserve As Long
SizeOfStackCommit As Long
SizeOfHeapReserve As Long
SizeOfHeapCommit As Long
LoaderFlags As Long
NumberOfRvaAndSizes As Long
DataDirectory(0 To 15) As IMAGE_DATA_DIRECTORY
End Type

Private Type IMAGE_NT_HEADERS
Signature As String * 4
FileHeader As IMAGE_FILE_HEADER
OptionalHeader As IMAGE_OPTIONAL_HEADER
End Type

Private DOSHEADER As IMAGEDOSHEADER
Private NTHEADER As IMAGE_NT_HEADERS
Private SECTIONSHEADER() As IMAGE_SECTION_HEADER
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)

Public Function ReadPE(ByRef DATA() As Byte) As String
On Error GoTo ErrX
Dim CNT As Long
Dim u As Long
Dim dumpSec() As Byte

CopyMemory DOSHEADER, DATA(CNT), Len(DOSHEADER) 'Memulai mapping
If DOSHEADER.e_magic <> "MZ" Then Exit Function 'Periksa apakah DOS Header adalah valid
CopyMemory NTHEADER, DATA(DOSHEADER.e_lfanew), Len(NTHEADER)
CNT = CNT + DOSHEADER.e_lfanew + Len(NTHEADER) 'Offset section pertama
If NTHEADER.Signature <> "PE" & Chr(0) & Chr(0) Then Exit Function 'Periksa apakah file PE adalah valid
ReDim SECTIONSHEADER(NTHEADER.FileHeader.NumberOfSections - 1) 'Array tabel section
For u = 0 To UBound(SECTIONSHEADER) 'Enumerasi tiap section
CopyMemory SECTIONSHEADER(u), DATA(CNT), Len(SECTIONSHEADER(0))
CNT = CNT + Len(SECTIONSHEADER(0)) 'Offset section berikutnya
If SECTIONSHEADER(u).nameSec = ".data" Or u = 1 Then 'Periksa apakah section ke 2 atau bernama .data
POINTERTORAW = SECTIONSHEADER(u).PointerToRawData 'Dapatkan offset section
SIZEOFRAW = SECTIONSHEADER(u).SizeOfRawData 'Dapatkan ukurannya
ReDim dumpSec(SIZEOFRAW - 1)
For i = 0 To SIZEOFRAW - 1
dumpSec(i) = DATA(i) 'Salin array yang mengandung section code
Next
ReadPE = Hex(CRC32(dumpSec(), SIZEOFRAW - 1)) 'Teknik CRC32
GoTo udah
End If
Next u
udah:
Exit Function
ErrX:
On Error GoTo 0
End Function

------------------ STOP COPy FROM HERE ------------------

Dimana DATA() adalah array byte dari file PE yang dibuka. Engine scanner ini perlu ditingkatkan sensitifitas
nya, karena bila terdapat section dummy pada urutan section kedua atau tidak ada section yang bernama .data
maka hasil yang diperoleh akan salah.

Penutup#
Engine scanner statis pada AntiVirus dapat ditingkatkan kinerjanya dengan menambahkan algoritma, fungsi ataupun
prosedur tertentu dalam menganalisa setiap file suspect. Salah satu yang bisa ditambahkan adalah fungsi pengecekan
per section pada file PE. Fungsi ini juga masih rawan dari kesalahan analisa. Diharapkan dengan adanya artikel ini
dapat mengembangkan ataupun memajukan kualitas aplikasi Anti Virus lokal.

Referensi#
Pietrek,Matt; Peering Inside the PE: A Tour of the Win32 Portable Executable File Format; MSDN; 1994
www.allapi.net
www.google.co.id
www.planet-source-code.com

Links#
Projek lengkap dapat didownload di : Projek AV 2, Mirror

Jumat, 17 Agustus 2007

NIDS di Linux dengan Snort



IDS atau Intrusion Detection System itu paan ya? Menurut sejumlah referensi, IDS adalah suatu sistem yang memonitor perubahan-perubahan yang terjadi di sebuah sistem komputer, baik itu perubahan dalam sebuah jaringan maupun dari penggunaan komputer itu sendiri. IDS banyak macamna, antara lain :

1. HIDS, Host based Intrusion Detection System. IDS jenis ini akan memonitor dan menganalisa segala aktifitas yang terjadi dalam satu host tertentu.
2. NIDS, Network Intrusion Detection System. IDS yang ini akan memonitor dan menganalisa semua lalu-lintas paket yang ada di jaringan.
3. PIDS, Protocol-based Untrusion Detection System, nah kalo yang ini biasana ditempatkan di front-end sebuah server. Akan memonitor dan menganalisa semua komunikasi yang terjadi di suatu protokol, misal HTTPS.
4. APIDS, Application Protocol-based Intrusion Detection System. Hampir sama dengan PIDS, hanya saja agak berbeda tempat "nangkringna". Dia akan memonitor dan menganalisa status, perubahan dari suatu aplikasi protokol.
4. Hybrid Intrusion Detection System. Dari namana ajah dah diketahui "gabungan", berarti jenis yang ini adalah gabungan dari jenis2 yang sudah ada.

Yuk kita coba mengimplementasikan NIDS di linux. Disini aq pake box Linux debian etch 2.6.18-4-alpha-generic. Snort adalah salah satu aplikasi NIDS yang ada, Snort yang akan diinstal adalah versi 2.3.3. Oh iya, si Snort ini mempunyai kemampuan untuk mengexport log ke bentuk database, ada beberapa database yang dapat digunakan, kayak MySQL, PostgreSQL, oracle, MSSQL dan odbc. Kali ini kita tidak menggunakan fitur ini :).

Pertama tentuna kita install si Snort, pake perintah apt-get :

debian:~# apt-get install snort

buzz..buzz.. si apt bakal nyari dependencies dari si snort sekalian :). Kalo udah diinstall, nanti akan muncul menu yang menanyakan alamat IP yang akan di monitor ma si Snort. Aq masukin 192.168.1.0/24, buat monitor LAN aq :)

Setelah itu, akan dijalankan si Snort secara otomatis. Buat ngecek dah jalan pa lom, kita cari prosesna :

debian:~# ps -ax | grep snort

2082 ? Ss 0:02 /usr/sbin/snort -m 027 -D -d -l /var/log/snort -u snort -g snort -c /etc/snort/snort.conf -S HOME_NET=[192.168.1.0/24] -i eth3
2321 pts/0 S+ 0:00 grep snort

Yups, si Snort telah berhasil diluncurkan :P hehehhe, secara default si Snort nyimpen logna di /var/log/snort dalam bentuk log tcpdump. Ya kalo pgn dibaca harus pake aplikasi log analisis, ato pake tcpdump juga bisa :)

Apaan sih arti dari argumen2 -D -d -l n dll? -m deklarasi umask, -D berarti Snort berjalan pada mode Daemon, -d berarti Snort akan men-dump layer aplikasi, -l berarti Snort akan menyimpan file log ke lokasi yang ditentukan, -u berarti Snort dijalankan sebagai userid yang ditentukan, -g berarti Snort dijalankan sebagai groupid yang ditentukan, -c berarti si Snort akan menggunakan file konfigurasi yang ditentukan, -S akan mendeklarasikan nilai ke variabel yang ditentukan (n=v), dan -i adalah interface yang akan di"tangkringin" :P

Dalam beberapa kasus si Snort agak bermasalah. Versi yang terbaru saat ini dari www.snort.org adalah versi Snort 2.7.0.1. Aq install di box Debian n Slackware masih ada masalah. Masalahna yaitu si Snort gagal untuk berjalan dgn sukses, hal ini dapat dilihat pada /var/log/syslog :

debian kernel: device eth3 entered promiscuous mode
debian kernel: device eth3 left promiscuous mode

Beberapa thread di forum Snort.org juga menunjukkan hal ini. Tapi sampai saat ini aq juga lom tau kenapa :(.