Hacking dan Reverse Engineering

Sejak dulu banyak yang bertanya kepada saya mengenai Hacking, dan mengenai  reverse engineering. Pertanyaan ini semakin sering muncul setelah saya menulis mengenai Hacking, Cracking dan IT Pemilu serta artikel Analisis Lengkap Virus Brontok. Pertanyaan yang sering muncul adalah yang sejenis ini “bagaimana caranya ngehack situs x”, “bagaimana caranya ngehack program x”, “di mana saya bisa mendapatkan program x”, “bagaimana caranya menganalisis virus x”.

Seringkali saya tidak membalas email-email tersebut, karena berbagai macam alasan. Pada tulisan ini saya akan menjelaskan apa alasan-alasan tersebut, dan sekaligus berusaha menjawab pertanyaan yang sering diajukan.

Warning posting ini sangat panjang. Pastikan Anda punya waktu luang sebelum mulai membaca. Kalau Anda membaca di kantor, pastikan bos sedang tidak melihat. Mungkin saya akan terdengar seperti orang yang sombong dan mengesalkan, jadi bertabahlah dalam membacanya.

Alasan pertama dan yang paling utama adalah saya tidak tahu tujuan utama penanya menanyakan aneka pertanyaan tersebut. Kebanyakan pertanyaan tersebut jika dijawab bisa berakibat buruk, mungkin dalam jangka pendek mungkin juga dalam jangka panjang. Tidak gampang bisa mengetahui maksud dan tujuan penanya. Saya hanya bisa mencari reputasi orang dari Internet, dan biasanya saya tidak menemukan apapun mengenai penanya. Untuk apa menjawab pertanyaan hacking/cracking jika akhirnya hanya menyusahkan orang lain?

Alasan kedua adalah saya tidak tahu di mana harus mulai menjawab pertanyaan jika saya tidak tahu kemampuan penanya. Misalnya jika ada orang bertanya bagaimana menghack situs “X”, saya bisa menjawab “oh situs itu punya bug SQL injection di bagian sistem loginnya”. Jika Anda mengetahui dasar security, Anda akan langsung tahu apa yang saya maksud, dan bisa segera tahu bagimana mengakses seluruh data di situs tersebut. Sebaliknya, jika Anda benar-benar pemula, Anda tidak akan mengerti apa yang saya maksud. Jika Anda tahu mengenai database relasional, mungkin Anda bisa belajar mengenai SQL Injection dari beberapa artikel di Internet. Jika Anda sama sekali tidah tahu mengenai database, Anda akan butuh waktu cukup lama untuk bisa mengetahui apa yang saya maksud karena Anda butuh belajar dulu relational database. Biasanya dibutuhkan beberapa email untuk bisa mengetahui kemampuan orang tersebut. Tapi saya sudah belajar, bahwa orang yang tidak bisa menyatakan pertanyaannya dengan baik biasanya adalah pemula.

Orang yang terlalu banyak bertanya kepada orang lain biasanya tidak berbakat dalam bidang reverse engineering dan hacking. Bertanya itu baik, tapi bertanya terus menerus itu tidak baik. Apalagi jika sudah ada banyak tulisan, artikel, dan program yang tersedia yang sangat mudah dicari dengan Google, dan sudah tersedia banyak link di Wikipedia. Kalau Anda tidak punya peta, tidak punya GPS dan berada di di tengah gurun pasir yang gersang, bertanya jalan pulang itu baik. Jika Anda ditengah kota, dan sudah jelas ada tulisan rute ke arah yang Anda tuju, dan Anda punya peta serta GPS serta akses Internet, tapi tidak mau melihat itu semua dan malah bertanya arah kepada pak polisi yang sedang sibuk mengatur lalu lintas, itu hal yang bodoh dan mengesalkan.

 

Sekarang saya ingin menjawab secara umum aneka pertanyaan yang sering ditanyakan.

Pertama adalah mengenai “hacking” dan aneka pertanyaan seputar hacking. Kebanyakan yang dimaksud dengan hacking adalah “security hacking” atau lebih dikenal dengan cracking. Anda bisa membaca sendiri apa itu hacking dan cracking dari berbagai dokumen di Internet. Meng-hack sebuah situs bisa berarti banyak, ini bisa berarti Anda ingin men-deface situs tersebut (mengganti tampilan situs), mencuri data situs tersebut (biasanya yang diincar adalah nomor kartu kredit), menjadikan situs lompatan untuk phishing, membuat situs sebagai sarana penyebar virus, atau Anda hanya ingin mengetes security Anda sendiri. Anda bisa melihat sendiri bahwa tujuan-tujuan tersebut sebagian besar tidak mulia. Kalo Anda kerja di perusahan pembuat kunci, lalu ada orang asing yang muncul dan bertanya “pak gimana caranya membongkar kunci model Z ya pak?” apakah Anda akan menjawab pertanyaan tersebut? (apalagi kalo ditanya “untuk apa?”, dan dia menjawab “saya mau maling ayam tetangga pak”).

Saya harus menegaskan bahwa saya tidak menganggap diri saya seorang pakar security (biarlah orang lain yang mengaku jadi pakar). Pekerjaan dan kemampuan utama saya adalah sebagai programmer. Saya pernah menghack dan pernah hampir DO karena kasus tersebut. Saya juga pernah menjadi administrator di kampus ITB selama beberapa tahun.

Jawaban pertanyaan “bagaimana caranya menghack situs X atau sistem Y” adalah cukup sederhana: belajarlah menjadi administrator sistem. Belajarlah mengadministrasi aneka macam service seperti HTTP, FTP, SMTP, dll. Belajarlah aneka macam perintah command line di berbagai sistem operasi. Belajarlah aneka macam sistem basisdata. Anda akan bisa bagaimana cara “menghack” setelah Anda bisa mengadministrasi sistem, dengan membaca satu atau dua buku hacking. Jika saya berhasil mengakses shell dengan hak Administrator pada sebuah situs dengan sistem operasi Windows Server 2003 dan saya memberikan akses tersebut ke seorang script kiddie, maka dia belum tentu mengerti apa yang harus dilakukan dari command line tersebut. Anda perlu tahu bagaimana menjalankan sistem yang ingin Anda serang. Sama seperti maling yang ingin mencuri anjing yang mahal, yang sudah dibukakan pintu tapi tidak tahu bagaimana memegang anjingnya dan malah digigit anjing.

Butuh waktu dan latihan untuk mengetahui cara mengamankan server sebelum Anda bisa dengan sukses menjebol aneka situs. Kemampuan menggunakan tools tidak bisa menggantikan skill. Misalnya saya ada di LAN yang sama dengan Anda, lalu Anda mengakses email melalui browser tanpa protokol HTTPS, maka saya akan bisa mengetahui password Anda dengan sniffing. Hal ini sangat mudah didapatkan dengan program sniffer yang bisa didownload di aneka tempat. Tapi konsep sniffing ini sendiri jauh lebih menarik. Bagaimana sniffing bisa dilakukan? di jaringan apa saja ini bisa dilakukan? (apakah bisa di jaringan WiFi?). Jawaban pertanyaan itu bisa didapatkan jika Anda mengetahui konsep physical layer di jaringan. Di LAN ini jelas bisa terjadi karena prinsip ethernet  yang mengirimkan data ke seluruh jaringan (shared medium dengan protokol CSMA/CD, silakan Anda baca sendiri mengenai WiFi).   Lalu pertanyaan berikutnya: apakah hanya password email saja yang bisa ditangkap? (bagaimana dengan FTP, SSH, dll). Jawaban pertanyaan ini bisa didapatkan dari pemahaman mengenai protokol jaringan (misalnya bahwa SSH menggunakan enkripsi).

Lalu jika Anda punya mental Hacker yang curious, maka akan muncul banyak pertanyaan lain, misalnya bagaimana cara mendeteksi sniffing di jaringan kita. Lalu bagaimana menghindari sniffer jika kita di warnet? (Gunakan HTTPS, atau akses email via POP/IMAP dengan TLS). Jika sniffing tidak bisa digunakan untuk mendapatkan password orang, bagaimana cara lain lagi mengetahui password orang tersebut (Anda bisa menginstall keylogger, melakukan Man In the Middle Attack, Social Engineering, atau memukuli orangnya dan meminta passwordnya). Lalu mungkin muncul juga pertanyaan: mengapa design Ethernet tidak aman, apakah promiscuous mode ada kegunaannya? (ada, misalnya untuk debugging packet jaringan dengan mudah). Ada banyak sekali hal yang perlu diketahui jika Anda ingin menjadi ahli security yang baik.

Perlu dicatat juga bahwa ada banyak tools di internet ini yang dapat digunakan untuk menghack aneka situs yang pengamanannya rendah dengan cukup mudah, misalnya Metasploit Framework. Banyak script kiddies yang memakai tools semacam ini dengan cara yang agak “brutal”. Mereka mencari aneka situs yang tidak aman, lalu di hack. Ini seperti seseorang yang diberi pentungan kecil, lalu pergi ke tempat ramai, dan memukuli semua anak kecil yang ditemukan, tapi tidak bisa jika disuruh menghadapi orang dewasa. Jika Anda sangat hebat dan bisa menghack situs manapun, atau setidaknya situs-situs besar, Anda bisa menjadi kaya raya dan tidak terlacak. Bisa menghack banyak situs bukan ukuran keahlian. Siapapun yang memiliki sedikit keahlian bisa mengajari Anda menghack beberapa jenis situs. Tapi jika Anda ingin mendapatkan pengertian yang mendalam, Anda harus belajar banyak. Saya baru merasa bisa benar-benar menghack sistem pertama saya setelah sekitar 4 bulan belajar. Hal itu saya lakukan cukup intensif (waktu itu saya punya banyak sekali waktu luang).

Belajarlah mulai dari dasar, dan perkuatlah pemahaman Anda pada berbagai bidang. Jadi hacker itu seperti jadi Ninja, Anda bisa saja diajari aneka alat yang digunakan Ninja, tapi apakah tubuh Anda cukup kuat dan lentur? apakah refleks Anda cukup tinggi?. Ada peralatan ninja yang mudah dipakai, misalnya Anda bisa menyabet orang yang sedang diam dengan ninjato, tapi akan sulit bagi Anda menggunakan bom asap untuk “menghilang”. Menjadi ninja butuh dasar-dasar yang kuat, demikian juga halnya untuk bisa “menghack server”.

Setelah membaca apa yang tertulis di atas, semoga Anda bisa lebih memahami, dan bisa memulai mencari dasar dari sesuatu. Jika Anda tidak tahu sama sekali bagaimana email bekerja, jangan memulai mencari “cara hacking email”, tapi mulailah dengan “how email works”. Setelah itu carilah info lebih lanjut mengenai hal-hal yang tidak Anda mengerti (SMTP, POP, IMAP, dll) di Wikipedia. Mulailah mencari hal yang berhubungan dengan kata kunci “email security”. Setelah itu pikirkan apa lagi yang harus dilakukan. Jika dititik ini Anda masih tidak tahu, Anda tidak punya bakat dalam bidang ini (mungkin bakat Anda adalah menyanyi, sudah coba Indonesian Idol?).

 

Kedua adalah mengenai reverse engineering. Hal ini berkaitan erat dengan analisis virus, dan juga cracking program. Saya pernah belajar membuat virus, mengcrack aneka macam program, menganalisis virus, dan lain-lain yang berhubungan dengan reverse engineering, tapi ini bukan bidang dan keahlian utama saya. Sekali lagi bidang utama saya adalah programming.

Apa sih reverse engineering itu? ini adalah proses untuk membongkar bahan dan teknologi yang ada pada suatu benda. Orang bisa mereverse engineer aneka macam hal, misalnya resep masakan atau benda elektronik, atau program. Tentunya dalam konteks ini, yang dimaksud adalah software reverse engineering, yaitu proses bagaimana kita bisa mengetahui algoritma program (atau source codenya jika mungkin). Ada banyak hal yang bisa dilakukan dengan reverse engineering. Dalam kasus virus, kita bisa menganalisis virus dan membuat anti yang tepat. Dalam kasus proteksi program, kita akan bisa membongkar proteksi seperti serial number dan expiration date. Dalam kasus kehilangan source code, kita bisa mengembalikan sebagian kode yang hilang. Jika kita ingin membuat program yang bisa membaca format program lain, kita juga perlu mereverse engineer jika format tersebut tidak dibuka secara umum.

Mengenai program/tools untuk reverse engineering, ada banyak yang bisa digunakan. Saya akan memberikan beberapa petunjuk: IDA Pro dan OllyDbg. Jangan minta tutorial kepada saya untuk menggunakan dua tools tersebut. Carilah tutorial di Google. Dua tools tersebut hanyalah beberapa dari banyak tools yang bisa digunakan. Jangan berfokus pada tool berfokuslah pada skill. Kebanyakan orang menanyakan apa program yang perlu dikuasai untuk melakukan X dan berfokus pada program X tersebut.

Ada program yang dapat digunakan untuk membongkar program dalam bahasa tertentu. Contoh: program java yang tidak di-obfuscate bisa dibongkar dengan jad dengan mudah. Program serupa juga tersedia untuk .NET, dan aneka bahasa lain yang menggunakan bytecode. Namun program Java bisa diproteksi dengan obfuscator, jadi tidak semua semudah itu. Untuk menemukan aneka tools reverse engineering, gunakanlah Google dan telusuri aneka link di Wikipedia. Bahasa Inggris wajib Anda kuasai untuk membaca aneka tutorial yang ada di Internet.

Anda bisa bertanya pada ahli elektronik dan bertanya “pak pake obeng mana untuk membuka Sony Ericsson P990i”, dan ia akan menjawab “oh pake obeng Torx dan Philips“. Tapi itu bukan berarti Anda bisa membuka semua peralatan elektronik dengan obeng yang sama (misalnya untuk membuka Wii Anda butuh obeng Tri-Wing). Kalau Anda ahli elektronik, Anda tidak akan bertanya obeng apa yang dibutuhkan karena sudah jelas terlihat dengan mata. Berbeda dengan masalah obeng yang bisa dipelajari dalam waktu beberapa menit, untuk “membuka” suatu program yang kompleks dibutuhkan kombinasi aneka program dan pemakaian program-program tersebut membutuhkan keahlian. Perlu diperhatikan juga, jika Anda melihat orang bisa membuka tutup botol dengan gigi, bukan berarti tutup botol harus dibuka dengan gigi, dan mungkin Anda tidak akan pernah bisa menggunakan gigi Anda untuk membuka tutup botol. Ingat bahwa tools bukan segalanya.

Kerumitan sebuah program biasanya adalah karena programmer menggunakan berbagai macam cara untuk melindungi programnya. Misalnya dalam kasus program yang memiliki batas waktu N hari. Program pasti harus menyimpan fakta bahwa program pernah diinstall pada tanggal tertentu. Jika Anda seorang programmer yang membuat program di Windows, maka Anda akan segera terpikir di beberapa tempat, misalnya di Registry Windows, di direktori program itu sendiri, di direktori sistem Windows, dan di berbagai tempat lain (misalnya di Serial Number sementara).  Tidak ada satu tempat pasti yang digunakan. Ini sama saja dengan menanyakan di mana seseorang menaruh dokumen pentingnya, setiap orang akan memiliki tempatnya sendiri (mungkin sebagian besar menaruhnya di lemari atau di brankas besi di rumahnya, tapi ada juga yang menyimpannya di bank). Masalahnya juga akan berbeda di tiap OS, di Linux tidak ada registry, sedangkan di Symbian ada direktori tertentu yang hanya bisa diakses oleh program tertentu dan lebih mudah digunakan untuk menyimpan informasi tersebut (yang tidak bisa diakses kecuali dengan exploit tertentu, misalnya AppTRK).

Keahlian/skill apa yang diperlukan untuk reverse engineering? pertama Anda harus bisa memprogram. Jika Anda menemukan program X  dalam bahasa Java dan bertanya bagaimanan membongkarnya, saya akan menggunakan jad dan menyerahkan sourcenya pada Anda. Nah jika Anda tidak bisa membaca program dalam bahasa Java, apa yang akan Anda lakukan?.  Jika Anda ingin membongkar program secara umum, belajarlah bahasa C, dan assembly. Gunakan opsi kompiler untuk menghasilkan kode assembly dari C untuk mempelajari mapping bagaimana kode dalam bahasa C diterjemahkan menjadi kode assembly. Jika Anda tahu bahwa source code X akan menjadi assembly Y, akan lebih mudah mengembalikan kode Y ke X. IDA Pro versi komersial terbaru juga bisa mendekompilasi aneka program ke bahasa C untuk assembly x86 (tapi program ini sangat mahal, dan masih terbatas pada prosessor x86, serta outputnya terbatas pada bahasa C).

Tidak ada satu “bahasa assembly” di dunia ini. Setiap prosessor memiliki bahasanya sendiri. Desktop Anda kemungkinan memakai prosessor x86 (atau mungkin PowerPC jika Anda pemakai Mac lawas). Handphone saya memakai prosessor ARM, router saya dan Playstation 1 milik saya memakai prosessor MIPS, Wii yang saya miliki memakai prosessor Power PC. Pengetahuan mengenai bahasa assembly untuk arsitektur selain X86 hanya diperlukan jika Anda ingin melakukan reverse engineering embedded device (misalnya saat ini saya sedang memporting kernel 2.6 ke Agestar yang saya miliki).

Sulit mencari analogi yang tepat untuk reverse engineering. Reverse engineering itu seperti arkeolog yang berusaha mendekripsi tulisan-tulisan kuno. Anda perlu bisa membuka situs kuno, dan mencari tulisan yang mungkin tersembunyi. Anda juga harus mengenal aneka macam tulisan kuno di dunia ini sebagai dasar untuk membaca tulisan yang Anda temui. Anda perlu tahu kebudayaan kuno untuk mengetahui jalan pikiran mereka.

Saya pernah juga menemui sebuah kasus di mana hacking dan reverse engineering bisa berhubungan, misalnya dulu pernah ada kelemahan dalam BIND 8 (server DNS), seseorang mengirimkan “exploit” ke milis bugtraq, padahal program yang dikirimkan itu tujuannya adalah untuk men-down-kan website NAI. Ini contoh reverse engineering yang saya lakukan (dulu saya masih memakai alamat email kampus):

Re: Bind 8 Exploit - Trojan

Yohanes Nugroho
Thu, 01 Feb 2001 14:46:45 -0800

On Wed, 31 Jan 2001, Matt Lewis wrote:

> It attacks dns1.nai.com, and I haven't researched it extensively yet,
> wanted to get this out. There's quite possibly other things going on as
> well, locally.

well, there is something going on locally, read it bellow

> I straced it and got odd results, the last time I ran it, it didn't
> launch the attack. Shellcode analyzation would be required here.

I only analyzed the shell code for linux and this is just a very simple
code. In C, it will be something like this:

fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)
while (1) sendto(fd, somedata, 1024, 0, dest, 16);

with 'dest' containing the address of the NAI's nameserver and somedata is
just junk.

> You can see the IP address for dns1.nai.com listed in the shellcode
> included with the file. It forks off many copies of itself and violently
> attacks NAI's nameserver.

and it attacks from the local computer running this trojan
(it never uses the host you specify at the command line at all)

just look at the set_ptr function bellow:

int
set_ptr(char *buff, int offset, unsigned long val, int s)
{
        char            copy_buff[1024];
        int             revval;

        memcpy(copy_buff, buff, 1024);
        revval = buff[SHELL_OFFSET_1];
        /* increment record usage count */
        revval += BIND_OFF_01;
        if (s)
                if (!fork())
                        /* simply copy value to offset */
                        memcpy(&copy_buff[offset], &val, sizeof(val));
        memcpy(buff, copy_buff, sizeof(copy_buff));
        return 0;
}

this is called like this:

set_ptr(shellcode, BIND_OFF_02, (unsigned long) shellcode, 1);

note: BIND_OFF_02 = 1028

simply said this is just an obfuscated way to run the "shellcode".

--
Regards
Yohanes

Anda juga bisa memperluas wawasan ke hal-hal lain yang ditemui di luar sana. Bagaimana cara menghack sistem ATM atau sistem pengamanan lain. Cara yang terbaik adalah belajar mengenal sistem. Jika Anda punya bakat pada bidang security, dan memiliki cara berpikir Hacker, Anda akan bisa menemukan kelemahan dalam sistem jika sistem itu memang lemah.

Pikirkan juga baik-baik: apa sih gunanya hacking atau reverse engineering? pikirkan apakah Anda memang berbakat di bidang itu, pikirkan juga apakah itu yang Anda inginkan di masa depan Anda. Pikirkan juga masalah moral hacking dan reverse engineering. Pikirkan misalnya apakah pacar Anda akan memutuskan Anda kalau dulu tahu bahwa pada masa PDKT Anda sering mengakses emailnya tanpa sepengetahuannya.

Jangan menghabiskan waktu untuk mencoba menghack situs ini. Jika Anda ingin membuktikan bahwa Anda “jago”, cobalah membuat exploit atau paper yang dipublish di bugtraq atau media/conference internasional lain.

Silakan tuliskan aneka pertanyaan Anda di bagian komentar. Saya kemungkinantidak akan membalas satu per satu, tapi akan membuat tulisan lain yang merangkum jawaban secara umum.

20 thoughts on “Hacking dan Reverse Engineering”

  1. bener-bener panjang postingannya…. tapi bener-bener menarik ^_^
    pertanyaan saya…

    Pikirkan misalnya apakah pacar Anda akan memutuskan Anda kalau dulu tahu bahwa pada masa PDKT Anda sering mengakses emailnya tanpa sepengetahuannya.

    pengalaman, Pak?

    1. Pet, kalau kami sih sejak pacaran udah tukeran password, jadi ga perlu diam-diam ngaksesnya. Tapi emang ilmu hacking dan reverse engineer ini kalau dikuasai orang jahat dengan motivasi jahat bisa berbahaya sekali.

  2. Itu bukan pengalaman pribadi, tapi tahu ada orang yang melakukan hal seperti itu.

    Kalo dari PDKT aja dah gak bener caranya, gimana nanti bisa bersama selamanya?

    Kalo saya dulu PDKT-nya dengan mendownload seluruh isi blog Risna, terus saya baca untuk mengetahui aneka macam hal tentang dirinya 🙂

  3. om,, minta izin memasukkan artikel om ke catatan di blog saya.

    saya mengambil bagian reverse engineering saja..

    ini link catatan saya reverse engineering

    klo om ga berkenan, ntar ga saya publish deh, saya simpen di blog ajah,,

    makasih atas ilmu nya ya om..

  4. penjelasan anda sangat bagus dan jelas …
    artikel yang bagus.. misal anda cipta in buku security,hacking,cracking dll pasti laku keras….

  5. Mantep dah artikelnya,
    Rata2x memang seperti itu pemikirannya,,,, 😀

    Om, pengalaman pribadi ya,,

    Pikirkan misalnya apakah pacar Anda akan memutuskan Anda kalau dulu tahu bahwa pada masa PDKT Anda sering mengakses emailnya tanpa sepengetahuannya.

    heheheheh…

    saya pnya pengalaman kaya gitu om, waktu lg ngfans2x ma hacking, ga tanggung2x email pluz accountnya lain saya blokir semua,, berhubung lagi PDKT :D, niatnya pengen jd penolong eh dah ketahuan duluan,,,, Plaaakkkk, jadi pacar engga malah kena tamprot deh,,,hehehehhe,,, ampe skrng orngnya masih ngambek… pd hal dah bertaon-taon 🙁

    Smua orng IT/TI, pasti ada isengnya jg, karena IT/TI MANUSIA JUGA,, heheheheh..PIISSS

  6. hmmm….

    manteb ilmu na om…

    om…
    biar bisa gitu hrs mulai dri mna dlu nich.

    mklum pemula tpi berkeinginan kuat…

    he…he…he.

  7. terbitin buku tentang hacking, cracking, dll om…. supaya pemula seperti saya mudah untuk belajar….

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

This site uses Akismet to reduce spam. Learn how your comment data is processed.