Kecoak Elektronik Indonesia [ KEI ] http://www.kecoak.org 24 Hours A Day, 300/1200 Baud Presents... #################################################################### TOKET - Terbitan Online Kecoak Elektronik Defending the classical hackers mind since 1995 Publisher : http://www.kecoak.org Contact : staff@kecoak.org #################################################################### Subject : The So Called Heapspray Technique Writer : - Contact : Screw u assfuck, don't try to find me Style : Unicode Transformation Format (UTF-8) --[1]-- Kecoak Elektronik License Kecoak Elektronik secara aktif mendukung Blue Ribbon Campaign. Kami akan berusaha untuk menerbitkan semua informasi yang kami anggap patut diketahui, baik dokumen teks, artikel majalah, atau surat kabar. Seluruh kredit akan diberikan kepada sang pengarang. Kecoak Elektronik tidak bertanggung jawab atas tindakan orang lain. Informasi yang disajikan di situs ini adalah untuk tujuan pendidikan dan informasionil belaka. Jika anda memutuskan untuk mengejawantahkan dalam bentuk apapun informasi yang tersimpan di situs ini, anda melakukan atas keputusan sendiri, dan tidak seorangpun selain anda bertanggung jawab atas tindakan tersebut. Dipersilahkan untuk mengambil sebagian atau seluruh dari isi artikel yang kami terbitkan dengan tetap mencantumkan kredit atas pengarang dan Kecoak Elektronik sebagai penerbit online. Artikel yang dikutip atau diambil tidak dapat dipergunakan untuk kepentingan komersil. --[2]-- Introduction Client Side. Dua buah kata yang kemudian menjadi sangat populer dalam dunia security maupun aktivitas online crime jika digabungkan dengan satu kata tambahan, Exploitation. Remote exploitation semakin hari semakin berkurang popularitasnya karena disebabkan oleh beberapa hal, salah satunya adalah semakin sulitnya sistem pertahanan suatu network atau sistem terutama yang digunakan untuk keperluan bisnis sehingga proses eksploitasi semakin sulit dilakukan. Walaupun tetap saja beberapa pihak masih sangat hobi dan terus menerus menemukan cara-cara mutakhir untuk dapat menembus sistem pertahanan network atau sistem saat ini. Client ataupun remote exploitation merupakan pilihan masing-masing, dan setiap pilihan memiliki resiko serta 'fun' tersendiri yang berbeda dari pilihan yang lain. Target client side exploitation adalah user, dalam hal ini pengguna personal computer. Personal computer sendiri saat ini sudah mulai bergeser bukan hanya terbatas pada desktop, namun juga meliputi perangkat seperti laptop ataupun smart-phone. Yang menjadi target tentu saja data-data personal didalamnya. Dalam remote exploitation, seseorang dapat masuk kedalam mesin suatu perusahaan dan melihat isi data-data didalamnya, dengan client-side exploitation maka seseorang dapat masuk kedalam personal computer pekerja suatu perusahaan untuk dapat melihat isi data-data didalamnya. Dengan semakin berkembangnya dunia internet saat ini, aplikasi social network maupun microblogging dapat meningkatkan pengguna internet dunia, termasuk indonesia. Kita bisa lihat bahwa saat ini para artis berlomba-lomba memiliki akun twitter ataupun facebook, ataupun politisi maupun orang-orang lingkungan pemerintah hingga setingkat mentri memiliki akun twitter pribadi yang bisa diakses oleh publik. Rasanya tidak sesulit itu menggunakan metode '@' untuk memancing seorang pengguna twitter mengunjungi suatu website yang telah disamarkan menggunakan 'shorten-link' seperti bit.ly, dan tanpa disadari oleh pengguna twitter tersebut dalam website yang dikirimkan sudah diletakan 0day exploit untuk menghabisi browser internet yang digunakan oleh target, dan dalam sekejap penyerang akan mendapatkan shell target. Atau dengan sedikit otomatisasi dan customized payload, komputer pribadi target dapat di-backdoor dan diakses oleh penyerang kapanpun dia mau. Dan secara perlahan-lahan, penyerang akan meng-eksplorasi seluruh isi personal computer target. Jika target artis mungkin '.jpeg' atau '.3gp' adalah sasaran utama pencarian, namun jika target adalah politisi ataupun pejabat penting dalam pemerintahan maupun corporate, maka tentunya akan ada banyak hal menarik yang harganya sangat mahal jika ditawarkan pada pihak-pihak tertentu. Mitos? nope. Jika masih ada yang berpikir bahwa cerita-cerita seperti ini adalah mitos maka itulah salah satu 'public opinion' yang disebarkan agar keberadaan hal-hal seperti ini tetap terjaga dan dapat dinikmati oleh segelintir orang saja. Pada TOKET edisi sebelumnya, G.S pernah menulis tentang eleonore yang merupakan salah satu exploit kit dalam dunia online crime (disebut crimeware). Banyak sekali aplikasi serupa yang dapat dibeli seharga rata-rata 500 usd, bisa kurang atau lebih tergantung kemampuan crimeware tersebut. Dan jika kita lihat kode-kode didalamnya, maka ada beberapa tehnik eksploitasi yang digunakan. Tehnik-tehnik ini sebetulnya bukan hal baru, banyak sekali security profesional yang mengetahui tehnik tersebut, dan bahkan beberapa lahir dari pihak profesional maupun akademis, namun ibarat pistol, tergantung siapa dan bagaimana memanfaatkannya. That's all for the intro. Saya lebih suka menunjukan tujuan dari suatu tulisan terlebih dahulu sebagai pengantar agar pembaca mendapatkan gambaran mengenai sisa isi article, dan juga pembaca tentunya dapat memilih apakah ingin meneruskan atau tidak. Salah satu tehnik tua dan masih digunakan hingga saat ini dalam hal client-side exploitation adalah heap-spray, dan tehnik inilah yang akan kita bicarakan hingga akhir artikel. Tentunya dengan disertai beragam contoh nyata dan up-to-date untuk menunjukan bahwa tehnik ini masih berlaku hingga saat ini (2010). --[2]-- Heap & JavaScript Browser internet merupakan salah satu aplikasi paling kompleks didunia saat ini, terutama dengan perkembangan beragam website yang setiap hari selalu berusaha memenuhi keinginan masyarakat dunia untuk ditampilkan dalam bentuk yang lebih baik dan lebih menarik. Saat ini browser internet sudah mirip seperti sistem operasi, beragam teknologi dimasukan kedalamnya, browser bukan lagi terbatas sebagai aplikasi untuk parsing halaman HTML. Dengan semakin boomingnya WWW (World Wide Web), teknologi untuk WWW pun semakin maju dan open standar dibuat serta dikembangkan oleh berbagai pihak. Salah satu komponen penting dalam dunia WWW adalah JavaScript. JavaScript membuat suatu halaman website menjadi lebih dinamis dan interaktif. Saat ini hampir semua website menggunakan komponen javascript didalamnya, dan sudah bertahun-tahun javascript menjadi masalah dalam hal security. Namun ibarat buah simalakama, jika javascript dimatikan pada suatu browser internet maka pengguna ibaratnya akan kembali ke jaman batu dimana tampilan website sangat jelek dan membosankan. Pembahasan mengenai javascript tentu akan sangat panjang, namun satu hal yang perlu dicatat adalah, javascript merupakan 'client-side technology'. Berbeda dengan bahasa pemrograman seperti PHP ataupun ASP dimana pemrosesan dilakukan oleh webserver dan kemudian hasilnya dikirimkan pada user dalam bentuk kode-kode HTML untuk ditampilkan oleh web browser, pada javascript, pemrosesan dilakukan oleh komputer user. Jika suatu website memiliki kode javascript, maka ketika kita membuka website tersebut, web browser yang digunakan akan memproses kode-kode javascript untuk kemudian ditampilkan hasilnya pada kita. Ambil contoh kode untuk proses looping: x=1; while (x<=10000) x = x +1; Jika potongan kode diatas di implementasikan dalam bentuk PHP, maka pemrosesan looping dilakukan menggunakan resource webserver dan hasilnya akan dikirimkan kepada user dalam bentuk "x=10000". Namun jika potongan kode diatas diberikan dalam bentuk javascript, maka pemrosesan looping akan dilakukan menggunakan resource komputer user, dalam hal ini processor dan memory user, untuk kemudian ditampilkan dalam bentuk "x=10000" oleh web browser. Ini adalah konsep yang pertama. Konsep yang kedua, teknologi javascript di-implementasikan oleh web browser(contoh: internet explorer) sebagai dynamic object. Object-object yang dibuat menggunakan javascript akan dialokasikan secara dinamis, yaitu dibuat saat dibutuhkan dan dihancurkan saat selesai. Dengan cara inilah web browser dapat melakukan management memory terhadap object-object yang dibuat oleh javascript secara efisien. Dalam konsep pemrograman low-level, hal ini disebut sebagai 'dynamic memory allocation'. Suatu aplikasi dapat mengalokasikan memory dibeberapa area, seperti stack dan heap. Saya lagi-lagi tidak akan membahas ini, silahkan gooling jika ingin mengetahui lebih dalam. Dalam konteks javascript, sebagaimana implementasi dynamic memory allocation, maka object-object dalam javascript akan dialokasikan pada area heap. Tentu saja tidak semua isi javascript akan diperlakukan sebagai object. Implementasi seperti variable akan dimasukan kedalam stack seperti implementasi bahasa pemrograman lainnya, namun untuk saat ini cukup di-ingat baik-baik bahwa object akan di implementasikan dalam bentuk dynamic memory allocation. --[3]-- Heapspray Exploit Dari beragam literatur yang terdapat di internet, eksploit yang menggunakan heap-spray sudah terlihat beredar sejak tahun 2001 (most of the time, the knowledge come from underground, remember?). Namun tehnik eksploitasi ini mulai mendapatkan perhatian publik dan banyak dibahas sekitar tahun 2005, terutama sejak skypher [1] merilis advisories berikut public exploit untuk bug MS05-20 [2] pada internet explorer 6. Tehnik eksploitasi yang menggunakan heapspray bisa dibilang adalah jalan terakhir, sangat mudah diimplementasikan, dan bersifat reliable. Tehnik ini bergantung pada beberapa parameter termasuk diantaranya jenis bugs yang dimanfaatkan. Tehnik eksploitasi pada umumnya adalah memaksa processor untuk menjalankan kode-kode yang diinginkan oleh penyerang. Ketika terdapat bug pada aplikasi, beragam metode dapat digunakan agar processor yang menjalankan aplikasi tersebut dapat dibelokan untuk menjalankan code-code lain yang diinginkan oleh penyerang. Dalam contoh 'classic stack-based buffer-overflow exploitation', penyerang akan berusaha mengontrol isi lokasi stack pada memory, dan kemudian mentrigger bug agar terjadi kondisi buffer-overflow pada stack dan mengarahkan jalan processor pada lokasi stack memory tertentu yang dapat di kontrol oleh penyerang. Pada kasus heap-exploitation, maka penyerang akan berusaha mengarahkan jalan processor ke lokasi heap memory. Ide dari heapspray adalah: 1. membanjiri isi memory heap. 2. mentrigger bug. 3. mengarahkan alur processor menuju lokasi memory heap. Tujuan kita adalah mengarahkan alur processor menuju suatu lokasi block memory pada heap, namun kita tidak tahu bagaimana caranya membuat object dialokasikan pada memory yang kita inginkan karena sifatnya adalah dynamic allocation. Itu sebabnya kita banjiri isi memory heap (menggunakan javascript) dengan ratusan atau ribuan data dengan harapan salah satunya akan mengisi lokasi block memory yang kita inginkan. --[4]-- Use-after-free Bug Karena sifatnya yang spesifik, maka cara paling mudah untuk mempelajari tehnik heapray adalah langsung pada suatu bug. Pada bug tersebut kita dapat melihat kondisi-kondisi dimana heapspray dapat diterapkan, dan nantinya kita akan sampai pada suatu tahap dimana implementasi heapspray merupakan aktivitas kopi-paste. Untuk mempersingkat dan mempermudah maka akan dipilih bug CVE-2010-0249, atau lebih dikenal sebagai aurora karena eksploit bug ini diklaim merupakan salah satu bagian dari "operation aurora" [3]. Bug ini sudah dibahas beberapa kali oleh publik, salah satunya dalam paper "Smashing the stack in 2010" [4]. Bug CVE-2010-0249 masuk dalam klasifikasi "use-after-free", yaitu jenis bug dimana eksekusi akan crash karena aplikasi berusaha mengakses suatu object dalam memory yang sudah tidak ada lagi. Public exploit untuk bug ini bisa ditemukan pada situs exploit-db.com [5], namun untuk penjelasan mendetail saya akan menyederhanakan bentuk exploitnya secara bertahap agar mudah dipahami. $ cat crash.html
Ketika dokumen HTML diatas dibuka dengan internet explorer 6 yang belum dipatch (note: file aurora.gif harus ada, karena alokasi memory akan dilakukan untuk file tersebut), maka rendering engine pada internet explorer akan memparsing bagian