Archive for the ‘Journal’ Category

Brute the crypto library

Friday, May 16th, 2008

Rasanya baru beberapa minggu yang lalu saat phoenix nge-buzz saya via YM mengenai POC yang dia buat berdasarkan informasi di bugtraq untuk dapat melakukan DOS (dan mungkin remote exploitation) pada openssh (masalah pada malloc memory allocation) dimana masih terdapat kegagalan untuk kemudian di diskusikan bersama, minggu ini sudah ada berita lain yang cukup mengejutkan dari distribusi debian.

Seperti yang kita ketahui bersama bahwa Luciano Bello menemukan bugs pada paket openssl Debian dimana kita dapat dengan mudah memperkirakan data random yang di generate oleh openssl. Data random ini digenerate oleh beberapa parameter yang disebut ’seed’, misalnya gerakan mouse, ketikan keyboard, dll. Hasil generate tergantung algoritma yang digunakan, apabila menggunakan DSA 1024 bit maka kemungkinan key yang digunakan adalah 2^1024. Bugs pada openssl ini telah digunakan oleh distribusi Debian sejak tahun 2006, penyebab awalnya adalah informasi dari Daniel Brahneborg yang mengatakan bahwa tools Valgrind dan juga Purify yang dia gunakan saat develop suatu aplikasi menyatakan adanya Uninitialized Variable, kemudian diputuskan bahwa ada masalah pada salah satu code di md_rand.c sehingga baris tersebut di hapus dari distribusi openssl debian. Penghapusan code tersebutlah akar dari permasalahan PRNG openssl debian.

Dan seperti yang kita ketahui juga bahwa openssl merupakan library yang umum digunakan oleh banyak aplikasi user dalam hal menangani masalah kriptografi, salah satunya adalah SSH. Jika awalnya total kemungkinan keys yang digenerate adalah 2^1024, maka pada distribusi debian tersebut total kemungkinan unique keys yang digenerate adalah 2^15. Kenapa?!karena ternyata dengan penghapusan baris code di md_rand.c tersebut menyebabkan satu-satunya parameter yang digunakan sebagai seed untuk randomisasi adalah PID (Process ID), dan di sistem Linux umumnya total proses ID berjumlah 32,767. HDM memberikan penjelasan yang lebih teknikal disini.

HDM juga telah develop tools yang dapat digunakan untuk membuat ‘kamus data’ berisi seluruh SSH Keys untuk algoritma 1024-bit DSA, 2048-bit RSA, dan 4096-bit RSA. Key-key tersebut digenerate dengan menggunakan GetPID Faker shared library yang akan membantu generate keys dengan memberikan informasi Proses ID palsu, mulai dari 1 s/d 32,767.

Sisanya?! mungkin cara gampangnya adalah memanfaatkan script Markus Mueler untuk bruteforce SSH server dengan bermodalkan ‘kamus data’ HDM diatas. HDM juga memberikan tips dimana untuk bruteforce SSH bisa memanfaatkan key-key dengan PID dibawah 200, karena keys-keys tersebut digenerate saat boot time sehingga process ID yang umumnya digunakan dibawah 200. Dan untuk aplikasi user lainnya bisa diperkirakan menggunakan Proses ID antara 500 ~ 10,000. Dengan mekanisme ini maka proses bruteforce bisa lebih efektif, dan kita juga bisa men-develop script sendiri untuk melakukan tugas ini.

Syarat vulnerable-nya hanya satu, aplikasi yang hendak di bruteforce (entah itu SSH, HTTPS, SSL type, dll) meng-generate keys pada distribusi debian yang vulnerable (termasuk turunannya seperti ubuntu, kubuntu, dll). Meskipun target bukanlah sistem debian, namun jika keys-nya di generate oleh sistem debian dan digunakan oleh distribusi lain tersebut maka akan tetap vulnerable. Hal inilah yang membuat sangat berbahaya mengingat pecinta debian sangat banyak, bahkan di Indonesia juga banyak sekali sistem yang dibangun menggunakan debian based. Setau saya para dedengkot seperti andhika triwidada juga pecinta debian :D .

Selama sistem target tidak memiliki pelindung terhadap serangan bruteforce, maka kita bisa melakukan SSH bruteforce ke sistem tersebut. Ada beberapa cara dan tools yang telah disediakan debian untuk mencari tau apakah sistem kita aman atau tidak, cara paling mudah (khususnya utk para admin server) mungkin dengan mencoba langsung script markus mueller terhadap sistem localhost untuk meng-crack SSH keys yang tersimpan pada

/root/.ssh/authorized_keys

Hm, jika yang vulnerable adalah suatu aplikasi, maka mungkin hanya akan berdampak pada sistem yang install aplikasi tersebut. Namun jika yang vulnerable adalah library, maka hal tersebut akan menjadi bencana. Karena library digunakan oleh beragam aplikasi, maka akan luar biasa banyaknya target yang dapat diserang melalui celah library tersebut. Lebih parah lagi, kita bukan hanya diharuskan untuk update package OpenSSL debian yang bersangkutan, namun juga diharuskan meng-generate ulang seluruh aplikasi pada sistem milik kita yang sebelumnya memanfaatkan OpenSSL debian. Dan pecinta debian juga banyak sekali, bukan hanya di Indonesia tapi juga di luar negeri. Dan jangan lupa, debian merupakan base distro untuk distro-distro populer semacam ubuntu dan kubuntu. Wew.

Btw, komo pake apa ya?gentoo kah?! :P .

Tor (The Onion Routing)

Monday, October 8th, 2007

Hi newbies, saya akan coba untuk menjelaskan secara ringkas namun (hopefully) jelas mengenai tor, tools anonymity yang saat ini sudah mulai banyak digunakan baik oleh publik ataupun private party. Segala hal tentang tor bisa kalian peroleh dari internet, termasuk dari situs resmi nya yang menyediakan informasi lebih akurat mengenai tor, apa yang saya jelaskan disini hanyalah ringkasan dari cukup banyak official article mengenai tor.

Tor dapat kalian donwload dari situs resmi nya di sini. Saat ini aplikasi tor tidak berdiri sendiri, namun sudah di bungkus dengan beberapa aplikasi tambahan, dan salah satu bundle aplikasi yang paling populer adalah vidalia. Bagi para pengguna M$ Windows dan Mac OSX dapat langsung mencoba paket vidalia tersebut yang inti nya terdiri dari tor dan privoxy (proxy server), sedangkan untuk pengguna linux diberikan source nya untuk compile dan build sendiri.

Awal kemunculan tor adalah untuk memfasilitasi user-user awam yang hendak berselancar di internet agar identitas serta tingkah laku nya tidak dapat di analisis. Banyak pihak yang menginginkan hasil analisis tersebut, diantara nya adalah perusahaan dan pemerintah. Jika kita mau care sedikit, maka hampir semua website yang kita kunjungi memiliki hubungan dengan Google, hampir di setiap website ada google-analytics. Fasilitas ini digunakan oleh google untuk berbagai keperluan diantara nya statistic tingkah laku pengguna internet selama berselancar, sehingga dapat di hitung statistic nya mengenai jenis website apa saja yang dikunjungi oleh user, informasi apa saja yang dibutuhkan oleh user dengan kriteria tertentu (anak-anak, remaja, dewasa, dll), kata kunci apa saja yang sering digunakan oleh user tersebut, dimana alamat email nya, forum apa saja yang sering di ikuti, dll. Inilah yang dimaksud dengan traffic analysis, hal ini bisa dilakukan salah satu nya adalah karena user umum nya menggunakan alamat IP yang bersifat statis, sehingga lebih mudah untuk dianalisis gerak-gerik nya selama berselancar di internet. Belum lagi adanya aktivitas sniffing oleh pihak-pihak tertentu (government, criminal) di jalur-jalur yang kita lewati saat berhubungan dengan internet. Untuk itulah kita membutuhkan suatu anonimitas saat berhubungan dengan internet, dengan menggunakan informasi source IP yang tidak statis (dinamis) paling tidak akan mengurangi dampak dari traffic analysis tersebut, inilah salah satu tujuan dari tor.

Aplikasi untuk menjaga anonimitas di internet saat ini ada banyak, namun umum nya bersifat centralized, dimana kita menggunakan fasilitas yang disediakan oleh pihak lain untuk berselancar di internet. Dengan adanya fasilitas ini maka lokasi asli kita akan disembunyikan, yaitu dengan menyembunyikan alamat source IP. Aplikasi yang paling umum adalah dengan menggunakan proxy, berikut ilustrasi saat menggunakan proxy:

Proxy Anonymity

Teori mudah nya, kita menghubungi mesin lain yang kemudian akan menjadi jembatan untuk mencapai server tujuan. Dengan begitu, maka pada log server tujuan hanya tercatat pengakses berasal dari mesin yang menjadi jembatan tersebut. Inilah yang disebut dengan anonymous proxy. Anonymous proxy ada banyak jenis nya, bahkan ada yang menggunakan beberapa server sehingga dapat mengakomodasikan pengguna nya untuk terus bergonta-ganti IP Address selama berada di internet

Tipe anonymous proxy dengan centralized tersebut memiliki kelemahan, yaitu data kita sebagai pengguna proxy tersebut akan tercatat pada mesin proxy, sehingga keberadaan kita tetap dapat di trace terutama apabila pihak yang menginginkan log nya berasal dari pihak kuat seperti government.

Untuk tehnik anonymitas yang lebih kuat, dibutuhkan suatu mekanisme untuk enkripsi data yang kita kirimkan ke internet dengan sifat mix atau tersebar. Dengan metode ini, maka jika data kita dapat di crack pada suatu titik tetap tidak bisa didapatkan data yang utuh karena untuk mendapatkan keseluruhan data tersebut membutuhkan seluruh titik sebagai pembuka kunci nya. Berikut ini ilustrasi dari metode enkripsi yang memanfaatkan beberapa titik sebagai kunci nya:

Basic Schaum

Schaum Encrypt

Schaum Decrypt

Pada gambar-gambar diatas, kita dapat melihat metode standar dari enkripsi schaum. Pada ilustrasi tersebut, setiap message akan melewati 3 buah mesin pemegang kunci, dan setiap message melewati satu mesin akan langsung di enkripsi oleh mesin tersebut. Dengan metode ini maka dibutuhkan 3 buah mesin untuk membuka message tersebut, sehingga apabila hanya satu buah mesin di kuasai…message tidak dapat di decrypt. Tor menggunakan pendekatan semacam ini untuk metode enkripsi nya

Anonymous proxy yang bersifat centralized memiliki kelemahan apabila server proxy nya dipaksa untuk membuka log siapa saja yang mengakses proxy tersebut, maka keberadaan pengguna dapat diketahui. Sehingga di butuhkan metode dimana data dari user melewati server-server yang juga bersifat anonymous, sehingga tidak ada yang tahu data user melewati titik mana saja.

Pendekatan enkripsi schaum secara tradisional juga memakan resource yang cukup besar, karena si penyedia teknologi anonymitas harus memiliki cukup banyak mesin untuk enkripsi data, disamping itu jika pihak penyedia teknologi ini juga dipaksa untuk memperlihatkan log dari seluruh sistem milik nya, maka anonymitas kita dapat segera dibongkar. Untuk inilah, design tor dibuat dengan mengandalkan sumbangan/kontribusi dari pihak-pihak di seluruh dunia untuk menyediakan mesin-mesin yang dapat dijadikan batu loncatan oleh pengguna tor sebelum mencapai server tujuan nya. Namun jika hal ini diimplementasikan tanpa menggunakan enkripsi akan percuma, sebab setiap mesin yang dijadikan batu loncatan dapat membaca data user tersebut. Untuk itulah tor menggunakan pendekatan metode schaum diatas untuk enkripsi data nya. Sehingga mesin-mesin di tengah arena loncatan tor menuju server tujuan tidak dapat membaca isi data user pengguna tor, bahkan mesin-mesin yang disebut virtual circuit itu tidak dapat mengetahui data user melewati mesin mana saja. Inilah salah satu keunggulan tor, memanfaatkan mesin-mesin kontribusi masyarakat seluruh dunia, dan tidak ada yang mengetahui jalur mana saja yang dilewati oleh data user tersebut selain user pengguna tor itu sendiri.

Pada praktek nya, saat awal proses inisialisasi maka tor client akan mendownload informasi seluruh mesin-mesin yang terdaftar pada jaringan tor dari suatu directory server. Kita dapat ikut menentukan direktori server tersebut, namun secara default directory server tor akan diambil dari moria2 dan tor26. Direktory server tersebut akan memberikan list mesin-mesin mana saja dalam jaringan tor yang dapat digunakan sebagai virtual circuit, dan mesin-mesin mana saja yang bersedia menjadi tor-exit-node, yaitu titik keluar pada jaringan tor yang berhubungan langsung dengan server tujuan. Berikut ini ilustrasi dari perjalanan paket dari tor client hingga server target yang hendak di tuju:

vc1

vc2

vc3

tor-exit

Dari ilustrasi diatas, kita dapat melihat proses tor saat membentuk virtual circuit saat inisialisasi awal. Setelah tor mendapatkan informasi server mana saja yang tergabung dalam tor network dari directory server, maka tor akan menggunakan suatu algoritma tertentu untuk memilih server-server mana saja yang dapat dijadikan virtual circuit. Pada gambar pertama, tor telah memilih virtual circuit pertama dan melakukan inisialisasi enkripsi dengan mesin tersebut, setelah virtual circuit pertama terbentuk maka tor akan menggunakan VC1 tersebut untuk mencari VC2 (Virtual Circuit ke-2). Setelah menentukan VC2 maka tor akan melewatkan data melalui VC1 untuk tukar menukar informasi mengenai enkripsi yang digunakan dengan VC2, setelah circuit terbentuk maka tor akan mencari VC3 melalui VC1 & VC2. Dan setelah semua virtual circuit terbentuk (umum nya 3), maka tor akan meng-informasikan user bahwa virtual circuit telah terbentuk dan tor siap untuk melewatkan data ke tujuan

Data user (misal: aplikasi http dari web browser) akan melewati VC1+VC2+VC3 sebelum mencapai server yang dituju, misal nya Google. Dan setiap melewati Virtual Circuit data akan di enkripsi dengan kunci yang berbeda-beda, sehingga apabila salah satu VC di crack tidak bisa membaca data tersebut, bahkan si penyedia Virtual Circuit tidak dapat membaca data yang lewat. Setelah mencapai Virtual Circuit terakhir (biasa disebut tor-exit-node), maka data akan dikembalikan dalam bentuk awal nya untuk kemudian di kirimkan ke server tujuan. Sehingga komunikasi antara tor-exit-node dengan server tujuan dalam bentun tidak terenkripsi. Di sinilah letak kelemahan tor.

Secara default, aplikasi vidalia akan instal tor plus privoxy (proxy server). Tor sendiri akan membuka port client (default) di port 9050 dengan tipe socks proxy, dan port 9051 sebagai control port untuk kebutuhan tor itu sendiri. Dari sudut pandang client, port 9050 tor dapat dimanfaatkan apabila aplikasi client bisa berkomunikasi dengan tipe socks proxy, namun tidak semua aplikasi dapat berkomunikasi dengan socks proxy sehingga tidak dapat memanfaatkan jalur tor. Untuk itulah digunakan privoxy, privoxy akan menjadi jembatan dalam mesin localhost miliki kita (dengan asumsi, tor tidak di relay) untuk menerima request dari port http untuk kemudian diteruskan melalui port socks. Jadi pada aplikasi internet milik kita (seperti web browser), cukup arahkan ke port privoxy (localhost:TCP:8118) dan kemudian data akan di jembatani oleh privoxy menuju (localhost:SOCKS:9050) dimana tor sudah menunggu.

Tor memiliki file konfigurasi yang biasa disebut torrc, untuk yang menggunakan vidalia dapat langsung menunjuk lokasi konfigurasi tor:

torrc-vidalia

Umum nya tor dapat langsung bekerja dengan baik tanpa perlu kutak-katik file konfigurasi nya, namun jika kita menginginkan kemampuan lebih dari tor tersebut maka kita harus membaca secara menyeluruh isi file konfigurasi (umum nya sudah termasuk dalam paket tor), pada file konfigurasi juga terdapat comment yang akan membantu kita dalam melakukan proses konfigurasi tor. Banyak hal yang dapat di customize melalui file konfigurasi ini, seperti pemilihan tor-exit-node agar sesuai dengan kehendak kita, pemilihan virtual circuit, time-out untuk berganti-ganti virtual circuit, konfigurasi tor sebagai server, dll. Bisa kalian baca sendiri secara jelas pada konfigurasi nya.

Tor juga menyediakan berbagai level LOG untuk proses troubleshooting, melalui LOG ini jugalah kita dapat melihat bagaimana tor bekerja. Berikut ini contoh LOG pada salah satu sesi tor milik saya:

Sep 20 23:04:27.670 [notice] Tor 0.1.2.15 opening log file.
Sep 20 23:04:27.670 [info] or_state_load(): Loaded state from “/Users/cyberheb/tor/state”
Sep 20 23:04:27.673 [info] crypto_seed_rng(): Seeding RNG from “/dev/urandom”
Sep 20 23:04:28.286 [info] router_load_routers_from_string(): 759 elements to add
Sep 20 23:04:28.634 [info] router_load_routers_from_string(): 461 elements to add
Sep 20 23:04:28.858 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “lefkada” at 140.247.60.64:80 (published 2007-09-20 17:41:46)
Sep 20 23:04:28.858 [info] networkstatus_list_update_recent(): Networkstatus from directory server “lefkada” at 140.247.60.64:80 (published 2007-09-20 17:41:46) is now “recent”
Sep 20 23:04:28.882 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “moria2″ at 128.31.0.34:9032 (published 2007-09-20 17:41:31)
Sep 20 23:04:28.882 [info] networkstatus_list_update_recent(): Networkstatus from directory server “moria2″ at 128.31.0.34:9032 (published 2007-09-20 17:41:31) is now “recent”
Sep 20 23:04:28.908 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “dizum” at 194.109.206.212:80 (published 2007-09-20 17:41:31)
Sep 20 23:04:28.908 [info] networkstatus_list_update_recent(): Networkstatus from directory server “dizum” at 194.109.206.212:80 (published 2007-09-20 17:41:31) is now “recent”
Sep 20 23:04:28.933 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “tor26″ at 86.59.21.38:80 (published 2007-09-20 17:43:07)
Sep 20 23:04:28.933 [info] networkstatus_list_update_recent(): Networkstatus from directory server “tor26″ at 86.59.21.38:80 (published 2007-09-20 17:43:07) is now “recent”
Sep 20 23:04:28.958 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “moria1″ at 128.31.0.34:9031 (published 2007-09-20 04:14:58)
Sep 20 23:04:28.958 [info] routerstatus_list_update_from_networkstatus(): Rebuilding router status list.
Sep 20 23:04:28.994 [info] entry_guards_compute_status(): Summary: Entry ‘h762626′ is reachable, usable and live.
Sep 20 23:04:28.994 [info] entry_guards_compute_status(): Summary: Entry ‘confector’ is reachable, usable and live.
Sep 20 23:04:28.994 [warn] Please upgrade! This version of Tor (0.1.2.15) is obsolete, according to 3/3 version-listing network statuses. Versions recommended by at least 1 authority are: 0.1.2.17, 0.2.0.6-alpha
Sep 20 23:04:28.999 [notice] We now have enough directory information to build circuits.
Sep 20 23:04:29.008 [info] circuit_predict_and_launch_new(): Have 0 clean circs (0 internal), need another exit circ.
Sep 20 23:04:29.009 [info] choose_good_exit_server_general(): Found 604 servers that might support 0/0 pending connections.
Sep 20 23:04:29.009 [warn] You specified a server “aquatorius” by name, but this name is not registered, so it could be used by any server, not just the one you meant. To make sure you get the same server in the future, refer to it by key, as “$5BC3A14A5536392B16E0596710DE03173D70656A”.
Sep 20 23:04:29.009 [info] choose_good_exit_server_general(): Chose exit server ‘aquatorius’
Sep 20 23:04:29.009 [info] add_an_entry_guard(): Chose ‘piktor’ as new entry guard.
Sep 20 23:04:29.009 [info] log_entry_guards(): h762626 (up made-contact),confector (up made-contact),piktor (up never-contacted)
Sep 20 23:04:29.011 [info] or_state_save(): Saved state to “/Users/cyberheb/tor/state”
Sep 20 23:04:30.011 [info] circuit_predict_and_launch_new(): Have 1 clean circs (0 internal), need another exit circ.
Sep 20 23:04:30.012 [info] choose_good_exit_server_general(): Found 604 servers that might support 0/0 pending connections.
Sep 20 23:04:30.012 [info] choose_good_exit_server_general(): Chose exit server ‘aquatorius’
Sep 20 23:04:31.013 [info] circuit_predict_and_launch_new(): Have 2 clean circs (0 uptime-internal, 0 internal), need another hidserv circ.
Sep 20 23:04:31.461 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘piktor’
Sep 20 23:04:31.461 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘piktor’
Sep 20 23:04:31.824 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘h762626′
Sep 20 23:04:32.020 [info] circuit_predict_and_launch_new(): Have 3 clean circs (1 uptime-internal, 1 internal), need another hidserv circ.
Sep 20 23:04:32.152 [info] circuit_finish_handshake(): Finished building fast circuit hop:
Sep 20 23:04:32.152 [info] exit circ (length 3, exit aquatorius): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $E0FC602A1B38969173D11591E40AA94A83975049(closed) $5BC3A14A5536392B16E0596710DE03173D70656A(closed)
Sep 20 23:04:32.160 [info] circuit_finish_handshake(): Finished building fast circuit hop:
Sep 20 23:04:32.160 [info] internal (high-uptime) circ (length 3, exit liquitor): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $1C342C43A509749B4C580B78E4318F9BC6EA0E3A(closed) liquitor(closed)
Sep 20 23:04:32.283 [info] circuit_finish_handshake(): Finished building fast circuit hop:
Sep 20 23:04:32.283 [info] exit circ (length 3, exit aquatorius): $3D58B7D5E3C2A011DA7B391B87FCC9BDFBC08F66(open) $40014353EEBC98977A99427242666B439EE7E375(closed) $5BC3A14A5536392B16E0596710DE03173D70656A(closed)
Sep 20 23:04:33.039 [info] circuit_finish_handshake(): Finished building circuit hop:
Sep 20 23:04:33.039 [info] exit circ (length 3, exit aquatorius): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $E0FC602A1B38969173D11591E40AA94A83975049(open) $5BC3A14A5536392B16E0596710DE03173D70656A(closed)
Sep 20 23:04:33.527 [info] circuit_finish_handshake(): Finished building circuit hop:
Sep 20 23:04:33.527 [info] internal (high-uptime) circ (length 3, exit liquitor): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $1C342C43A509749B4C580B78E4318F9BC6EA0E3A(open) liquitor(closed)
Sep 20 23:04:34.211 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘confector’
Sep 20 23:04:34.375 [info] circuit_finish_handshake(): Finished building circuit hop:
Sep 20 23:04:34.375 [info] exit circ (length 3, exit aquatorius): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $E0FC602A1B38969173D11591E40AA94A83975049(open) $5BC3A14A5536392B16E0596710DE03173D70656A(open)
Sep 20 23:04:34.375 [info] circuit_send_next_onion_skin(): circuit built!
Sep 20 23:04:34.375 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Sep 20 23:04:35.053 [info] circuit_finish_handshake(): Finished building circuit hop:
Sep 20 23:04:35.053 [info] internal (high-uptime) circ (length 3, exit liquitor): $8CFD0BC987576D41E52DE858246CF5C6B8BE63D1(open) $1C342C43A509749B4C580B78E4318F9BC6EA0E3A(open) liquitor(open)
Sep 20 23:04:35.053 [info] circuit_send_next_onion_skin(): circuit built!

Dari cuplikan log, kita dapat meng-analisis apabila terdapat kesalahan konfigurasi dan melakukan troubleshooting berdasarkan error yang didapatkan. Dari cuplikan log tersebut juga lah kita dapat melihat secara langsung apa yang terjadi pada tor.

Sep 20 23:04:27.670 [notice] Tor 0.1.2.15 opening log file.
Sep 20 23:04:27.670 [info] or_state_load(): Loaded state from “/Users/cyberheb/tor/state”
Sep 20 23:04:27.673 [info] crypto_seed_rng(): Seeding RNG from “/dev/urandom”
Sep 20 23:04:28.286 [info] router_load_routers_from_string(): 759 elements to add
Sep 20 23:04:28.634 [info] router_load_routers_from_string(): 461 elements to add

Cuplikan LOG diatas memperlihatkan bahwa tor memiliki kemampuan untuk menyimpan informasi-informasi sebelum nya pada local disk, informasi tersebut berupa server-server yang didapatkan dari direktori server untuk membangun virtual circuit. Informasi ini disimpan sesaat sebelum tor mengakhiri proses nya, dan akan di load saat tor akan memulai kembali servis nya, dengan kemampuan ini maka proses loading tor akan lebih cepat.

Sep 20 23:04:28.858 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “lefkada” at 140.247.60.64:80 (published 2007-09-20 17:41:46)
Sep 20 23:04:28.858 [info] networkstatus_list_update_recent(): Networkstatus from directory server “lefkada” at 140.247.60.64:80 (published 2007-09-20 17:41:46) is now “recent”
Sep 20 23:04:28.882 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “moria2″ at 128.31.0.34:9032 (published 2007-09-20 17:41:31)
Sep 20 23:04:28.882 [info] networkstatus_list_update_recent(): Networkstatus from directory server “moria2″ at 128.31.0.34:9032 (published 2007-09-20 17:41:31) is now “recent”
Sep 20 23:04:28.908 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “dizum” at 194.109.206.212:80 (published 2007-09-20 17:41:31)
Sep 20 23:04:28.908 [info] networkstatus_list_update_recent(): Networkstatus from directory server “dizum” at 194.109.206.212:80 (published 2007-09-20 17:41:31) is now “recent”
Sep 20 23:04:28.933 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “tor26″ at 86.59.21.38:80 (published 2007-09-20 17:43:07)
Sep 20 23:04:28.933 [info] networkstatus_list_update_recent(): Networkstatus from directory server “tor26″ at 86.59.21.38:80 (published 2007-09-20 17:43:07) is now “recent”
Sep 20 23:04:28.958 [info] router_set_networkstatus(): Setting networkstatus cached from directory server “moria1″ at 128.31.0.34:9031 (published 2007-09-20 04:14:58)
Sep 20 23:04:28.958 [info] routerstatus_list_update_from_networkstatus(): Rebuilding router status list.

Pada bagian diatas, Tor mulai mencari direktory server untuk menerima informasi mengenai server-server yang terdaftar pada jaringan tor untuk kemudian dibangun virtual circuit nya

Sep 20 23:04:28.994 [info] entry_guards_compute_status(): Summary: Entry ‘h762626′ is reachable, usable and live.
Sep 20 23:04:28.994 [info] entry_guards_compute_status(): Summary: Entry ‘confector’ is reachable, usable and live.
Sep 20 23:04:28.994 [warn] Please upgrade! This version of Tor (0.1.2.15) is obsolete, according to 3/3 version-listing network statuses. Versions recommended by at least 1 authority are: 0.1.2.17, 0.2.0.6-alpha
Sep 20 23:04:28.999 [notice] We now have enough directory information to build circuits.
Sep 20 23:04:29.008 [info] circuit_predict_and_launch_new(): Have 0 clean circs (0 internal), need another exit circ.
Sep 20 23:04:29.009 [info] choose_good_exit_server_general(): Found 604 servers that might support 0/0 pending connections.
Sep 20 23:04:29.009 [warn] You specified a server “aquatorius” by name, but this name is not registered, so it could be used by any server, not just the one you meant. To make sure you get the same server in the future, refer to it by key, as “$5BC3A14A5536392B16E0596710DE03173D70656A”.
Sep 20 23:04:29.009 [info] choose_good_exit_server_general(): Chose exit server ‘aquatorius’
Sep 20 23:04:29.009 [info] add_an_entry_guard(): Chose ‘piktor’ as new entry guard.
Sep 20 23:04:29.009 [info] log_entry_guards(): h762626 (up made-contact),confector (up made-contact),piktor (up never-contacted)
Sep 20 23:04:29.011 [info] or_state_save(): Saved state to “/Users/cyberheb/tor/state”
Sep 20 23:04:30.011 [info] circuit_predict_and_launch_new(): Have 1 clean circs (0 internal), need another exit circ.
Sep 20 23:04:30.012 [info] choose_good_exit_server_general(): Found 604 servers that might support 0/0 pending connections.
Sep 20 23:04:30.012 [info] choose_good_exit_server_general(): Chose exit server ‘aquatorius’
Sep 20 23:04:31.013 [info] circuit_predict_and_launch_new(): Have 2 clean circs (0 uptime-internal, 0 internal), need another hidserv circ.
Sep 20 23:04:31.461 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘piktor’
Sep 20 23:04:31.461 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘piktor’
Sep 20 23:04:31.824 [info] circuit_send_next_onion_skin(): First hop: finished sending CREATE_FAST cell to ‘h762626′
Sep 20 23:04:32.020 [info] circuit_predict_and_launch_new(): Have 3 clean circs (1 uptime-internal, 1 internal), need another hidserv circ.
Sep 20 23:04:32.152 [info] circuit_finish_handshake(): Finished building fast circuit hop:

LOG diatas memperlihatkan proses tor memilih virtual circuit yang akan digunakan, ada beberapa yang gagal namun akan dicoba kembali hingga akhir nya berhasil dibuat virtual circuit. Nanti nya, virtual-virtual circuit tersebut akan digunakan untuk melewatkan data dari user hingga ke server tujuan.

Tor juga sering digunakan untuk bypass proxy, atau tunneling. Namun bukan berarti tor tidak dapat di blok, jika kita melihat struktur proses kerja tor diatas, maka untuk administrator dapat melakukan blocking pada direktori server yang digunakan oleh tor (default: moria dan tor26), sehingga pengguna tor tidak dapat mengakses jaringan tor. Terlepas dari apakah bisa di blok atau tidak, tor tetap tools anonymity yang kuat untuk saat ini. Design nya yang dari publik untuk publik merupakan letak kekuatan tor, walaupun design tor-exit-node nya bisa menjadi kelemahan, namun hal tersebut bisa diminimalisasi dengan menggunakan servis yang memanfaatkan enkripsi (mis: SSL) untuk proses authentifikasi, sehingga perjalanan data dari awal hingga akhir selalu terenkripsi. Bagi para pengguna Linux dapat menikmati torK, dengan torK maka segalanya yang berhubungan dengan tor akan semakin mudah dan serba GUI. torK juga akan mempermudah kita melakukan berbagai macam koneksi seperti SSH, telnet, IRC via tor.

Selamat mencoba, untuk hal-hal yang kurang jelas dan ingin didiskusikan kita kembalikan ke media forum ;) . Semoga bermanfaat.

Webshell

Wednesday, October 3rd, 2007

Jadi kamu baru saja jalan-jalan di milw0rm dan membaca tentang suatu hole, katakan lah…RFI (Remote File Inclusion). Jenis hole yang bertebaran di berbagai web advisories dan tampak nya masih belum bisa membuat kebanyakan developer web sadar akan ada nya hole ini sehingga masih terdapat banyak aplikasi web yang rentan terhadap hole RFI. RFI merupakan jenis hole yang paling sering membutuhkan webshell agar hole tersebut dapat dimanfaatkan, walaupun pada kenyataan nya ada cukup banyak hole yang selain RFI yang dapat digunakan untuk kemudian mendapatkan shell dari suatu sistem melalui protokol HTTP.

Wait…shell dari suatu sistem melalui protokol HTTP?! YUP. Tujuan utama dari berbagai macam serangan (sistem/web) umum nya adalah mendapatkan shell target, entah itu ‘direct shell’ ataupun ‘web shell’. Shell merupakan suatu interpreter yang disediakan oleh sistem operasi agar dapat digunakan oleh user untuk berinteraksi dengan sistem tersebut. Contoh simple:

Jasmine:~ cyberheb$ pwd
/Users/cyberheb

banyak sekali yang sering menggunakan shell namun tidak sadar bahwa itu adalah shell. Contoh nya adalah bash pada linux, ataupun command prompt pada M$ Windows. Jenis exploitasi khusus nya yang dilakukan secara remote (remote exploitation) selalu berusaha semaksimal mungkin untuk mendapatkan shell target, tujuan nya jelas agar kita dapat mengendalikan target melalui shell tersebut. Banyak hal yang dapat kita lakukan setelah berhasil mendapatkan shell target.

Untuk serangan yang ditujukan terhadap aplikasi-aplikasi web, umum nya juga berusaha untuk mendapatkan shell target. Walaupun memungkinkan untuk mendapatkan system shell, pada kenyataan nya untuk tahap awal banyak yang menggunakan webshell setelah proses eksploitasi aplikasi web. Shell merupakan interpreter untuk berinteraksi dengan sistem, jenis shell yang memanfaatkan protokol http (web) untuk berinteraksi dengan sistem sering disebut webshell. Karena webshell ini berjalan diatas protokol HTTP, maka webshell membutuhkan suatu webserver. Jika pada sistem shell kita membangkitkan shell melalui aplikasi bash, csh, ksh (UNIX like) ataupun cmd.exe (Windows) maka pada web shell kita membangkitan shell melalui aplikasi .php, .asp, ataupun .jsp. Jenis webshell yang dapat digunakan tergantung pada teknologi target, jika target menggunakan aplikasi php maka kita harus menggunakan tipe phpshell dan jika target menggunakan asp maka kita harus menggunakan tipe aspshell.

Bagaimana cara kita mendapatkan web shell pada target tergantung pada jenis hole yang akan di eksploitasi serta kreativitas si penyerang, untuk RFI misal nya…kita tidak perlu upload webshell tersebut ke server target karena jenis hole ini akan membuat target meng-eksekusi webshell pada mesin lain. Namun untuk jenis hole pada web lain nya, kita dapat membodohi target untuk secara tidak sengaja men-download webshell tersebut dan selanjut nya kita dapat mengeksekusi webshell langsung via browser (http). Ada banyak sekali jenis webshell, baik yang sifat nya private ataupun public. Dan setiap webshell memiliki beberapa fungsi umum (seperti listing isi directory, menampilkan informasi sistem, dll) serta beberapa fungsi khusus (safe-mode bypass, encoder, sql-injection, backdooring, dll). Dan biasa nya, jenis webshell bersifat private merupakan hasil pengembangan dari jenis webshell lain dengan melakukan kustomisasi untuk mendapatkan fungsi lain yang kita inginkan.

Berikut ini adalah beberapa jenis webshell (public/private) yang umum digunakan oleh kalangan underground dalam melakukan serangan tergadap aplikasi-aplikasi web, beberapa jenis webshell dibawah ini merupakan favorite saya secara pribadi karena memiliki cukup banyak fungsionalitas, tentu saja masih banyak lagi jenis webshell dengan kemampuan khusus namun beredar di kalangan tertentu. So, here they are:

    1. C99Shell, C99 merupakan webshell produksi dari CCTeam rusia, C99 memiliki cukup banyak fitur yang terus dikembangkan dan saat ini banyak jenis private webshell menggunakan C99 sebagai template/base nya.
    2. r57, Jenis webshell r57 juga banyak digunakan serta dijadikan base template oleh berbagai jenis private webshell. Kalangan underground di Indonesia umum nya menggunakan webshell r57 ini ;) .
    3. Explorer ASP, Webshell diatas merupakan contoh webshell untuk target yang menggunakan teknologi ASP.
    4. Ekin0x, merupakan contoh private shell (seperti nya sekarang sudah public) dari cyber warrior security tim, webshell diatas juga memiliki beberapa fungsi tambahan yang berbeda dari webshell lain.
    5. Locus7s webshell, Contoh webshell diatas merupakan hasil pengembangan dari c100, C100 merupakan webshell rilis baru dari CCTeam (Captain Crunch Team) yang merupakan hasil pengembangan dari C99, kita bisa melihat bahwa webshell tersebut di customize oleh Locus7s team dan ditambahkan beberapa fungsi baru untuk kebutuhan private.

Itu adalah berbagai macam jenis webshell, kita bisa lihat bahwa webshell-webshell tersebut menyediakan fasilitas point-and-click sehingga memudahkan kita untuk meng-eksplorasi sistem target serta menjalankan fungsionalitas lain (seperti backdooring, brute-force, dll). Jenis webshell diatas termasuk webshell modern, namun bagi yang suka dengan webshell classic bisa menggunakan jenis webshell seperti ssh-webshell.

Jika kita mau bersusah payah sedikit untuk mempelajari code-code yang terdapat pada webshell-webshell tersebut, maka kita dapat membuat versi private milik kita ataupun kelompok kita pribadi. Dan juga menambahkan berbagai macam fungsi tambahan yang menurut kita akan sangat berguna. So, lagi-lagi dibutuhkan skill programming…khusus nya pemrograman aplikasi web seperti php dan asp. Selanjut nya, kita dapat menggunakan code-code diatas sebagai template / base untuk mengembangkan webshell milik kita pribadi (fungsi blind sql-injection, mass-defacing, scanner, dll bisa ditambahkan sendiri). Untuk jenis webshell yang lebih lengkap bisa mencoba webkit dari open-labs.

Haph phun!

Journal Uninformed #8

Wednesday, September 19th, 2007

Seperti biasa, jurnal uninformed selalu menyuguhkan artikel-artikel yang intelek dan murni hasil riset terkini mengenai berbagai macam teknologi di dunia security. Rilis artikel terbaru mereka bisa dibaca pada situs uninformed.org.

Massive-0wning (newbies series)

Wednesday, September 19th, 2007

Another Kecoak Elektronik’s ToKeT (Terbitan Online Kecoak ElekTronik) has been published, it’s about Massive-0wning with the technique explained based on real st0ry.

Check it out here.