Jenis-Jenis Masalah Keamanan dalam Jaringan Komputer

June 5th, 2010

Selain buffer overflow atau masalah-masalah dalam software lainnya, ada beberapa jenis masalah baik dalam lokal komputer atau jaringan yang dapat digunakan para hacker dalam melakukan aktivitasnya untuk melumpuhkan target.

Dalam artikel ini, saya akan mencoba menampilkan sebagian list dari masalah-masalah tersebut. Antara lain:

  1. Memberikan terlalu banyak informasi
  2. Denial-of-Service
  3. Otentikasi yang lemah
  4. Pembajakan dan sniffing sesi
  5. Vulnerabilitas pada protokol
  6. Vulnerabilitas pada implementasi protokol
  7. Kesalahan praktis administrator

Kita akan membahas masalah-masalah di atas satu per satu di artikel-artikel berikutnya.

Mengatasi buffer overflow

June 5th, 2010

Dari pembahasan-pembahasan sebelumnya, kita mengetahui apa itu buffer overflow dan apa yang dapat diakibatkan oleh security hole tersebut.

Pada pembahasan kali ini, kita akan mencoba membahas bagaimana cara mengantisipasi masalah tersebut.

Ada 3 poin yang ingin saya angkat dalam pembahasan mengantisipasi buffer overflow:

  1. Memperbaiki Program
  2. Program harus selalu memperhitungkan input atau nilai dari variabel, sehingga variabel yang disediakan tidak dapat disalahgunakan. Akan tetapi, program-program ini sangat banyak jumlahnya sehingga untuk memberantas security hole ini sangatlah sulit

  3. Memperbaiki Programmer
  4. Pendidikan terhadap programmer baru untuk tidak membuat program-program yang mengandung security hole sangatlah penting. Terkadang kita lebih mementingkan pemahaman dasar pemrograman tanpa mengindahkan kaidah-kaidah program secure coding.
    Akan tetapi, sama seperti poin pertama di atas, masih sangatlah

  5. Memperbaiki Mekanisme Memori (Stack, dll)
  6. Dari susunan paragraf di atas, kita bisa menerka bahwa cara ini lebih baik dari kedua cara di atas.
    Perlu digaris bawahi bahwa, program yang normal berada di kawasan “segment text” (lihat catatan sebelumnya). Segmen text merupakan “read-only” memori. Program yang baik tidak pernah mengeksekusi program di luar wilayah ini. (misal: wilayahheap atau wilayah stack). Cara yang efektif untuk mengatasi buffer overflow adalah dengan mengaktifkan fungsi pada kernel (di unix-based system) untuk tidak mengizinkan program yang ingin mengeksekusi kode di wilah stack, heap, dan lainnya. Mekanisme ini disebut stack operation.
    Aktivasi stack protection ini memerlukan kerjasama antara kernel dengan memory management unit pada CPU. Support pada hardware (antara lain sejak Pentium 4 atau 6-bit intel dan AMD processor) juga mulai dilakukan. Mekanisme pada hardware ini disebut “NX bit”. Mengenai “NX bit”, referensi berikut akan cukup bermanfaat http://en.wikipedia.org/wiki/Nx_bit. Kernel sejak 2.6.8 mensupport fungsi NX bit. Fungsi ini dapat dinonaktifkan dengan setting noexec=off.
    Selain pendekatan hardware di atas, Admantix Linux project mengeluarkan pendekatan mekanisme kernel, dengan mengeluarkan patch yang disebut grsecurity (lihat: http://grsecurity.org)
    Jika kita mengaktifkan salah satu atau kedua mekanismei atas, masalah mungkin akan muncul jika aplikasi yang digunakan memuat perintah untuk mengakses kode yang ditulisi di luar wilayah “segmen text”. karena itu, sebelum menggunakan setting di atas, sangatlah dianjurkan untuk mentest aplikasi program Anda.

Jenis-Jenis Buffer Overflow : Stack-Based

September 26th, 2008

Mari kita tinjau kembali program yang mengandung resiko buffer overflow:

// program_name : overflow.c

void buffer_overflow (char *str) {
   char buffer[20];

   strcpy (buffer, str);   // Fungsi ini mengkopi str -> buffer
}

int main () {
   char mystring[128];
   int i;

   for (i=0; i<128; i++)
       mystring[i]=’A’;

   buffer_overflow(mystring);
}

Pada saat fungsi buffer_overflow() dipanggil dari fungsi main(), stack frame dibuat dan dimasukkan ke dalam Stack (lihat kembali penjelasan mengenai segmen memori).
Stack frame ini akan terlihat seperti gambar di bawah ini.

Ketika 128 byte data ini ditulis dalam 20-byte buffer, 108-byte dari data ini tidak tertampung di dalam buffer dan menimpa apa-apa yang ada di bawahnya: stack frame pointer, return address, dan parameter fungsi *str. Lalu setelah fungsi buffer_overflow() selesai dieksekusi, program akan kembali ke alamat yang ada di dalam return address tanpa mengetahui bahwa data di dalam memori ini sudah berubah menjadi 0×414141 (0×41 adalah nilai hexadecimal dari karakter ‘A’). EIP pergi ke 0×414141, yang merupakan sembarang alamat memuat instruksi yang invalid atau bahkan berada di luar ruang memori. Hal ini menyebabkan program error dan selesai. Inilah yang disebut dengan stack-based buffer overflow, karena overflownya terjadi di segmen stack dari memori.

Overflow juga dapat terjadi di segmen memori lainnya seperti heap dan bss. Tetapi, yang menyebabkan stack-based itu sangat menarik adalah karena di sini return address dapat ditulis ulang. Bayangkan bagaimana jika return address menunjuk pada suatu ruang dalam memori yang memuat program yang dibuat sebelumnya. Ceritanya semakin menarik bukan?

Pertanyaannya sekarang, bagaimana caranya memasukkan program khusus ke dalam memori untuk kemudian dieksekusi oleh EIP. Jawabannya adalah Injeksi Bytecode! Bytecode merupakan kumpulan dari kode assembly yang disusun sedemikian rupa sehingga dapat langsung dieksekusi dan dapat diinjeksikan ke dalam buffer. Ada beberapa batasan yang tidak boleh dilanggar oleh sebuah Bytecode, antara lain, tidak boleh ada null karena akan dianggap sebagai akhir dari buffer tempat program diinjeksikan tersebut.

Salah satu Bytecode yang terkenal adalah Shellcode. Shellcode adalah Bytecode yang meluncurkan shell. Jika program dengan suid root mengeksekusi shellcode ini, hacker dapat memiliki hak akses root. Bagaimana caranya? Itu akan kita bahas dalam artikel berikutnya.

Memahami Buffer Overflow

September 26th, 2008

Sebelum membaca artikel ini, ada baiknya kalau Anda mengetahui cara kerja dan segmen-segmen yang ada pada memori. Artikel sebelumnya mungkin cukup untuk memberikan pemahaman dasar mengenai hal ini.

Mungkin Anda pernah mendengar tentang buffer overflow. Tentang bagaimana para hacker memanipulasi buffer overflow ini untuk mendapatkan akses ke dalam komputer atau bahkan jaringan target. Dalam penjelasan yang singkat, buffer overflow adalah peristiwa di mana wilayah yang dialokasikan di dalam memori tidak cukup untuk menampung data yang ingin disimpan ke dalam wilayah tersebut. Jika kita mendeklarasikan satu buah array dengan 4 anggota (char buffer[4]), maka jika kita ingin menyimpan kata “buffer” yang terdiri dari 6 karakter, maka yang terjadi adalah buffer overflow.

Pembicaraan pada artikel ini mengasumsikan pemrograman dalam bahasa C. Dalam bahasa C, pembuat program bertanggung jawab penuh terhadap data dan variabel yang dimuat di dalam memori. Walaupun bahasa C merupakan bahasa pemrograman tingkat tinggi, akan tetapi C tidak bertanggung jawab atas integritas data seperti bahasa pemrograman tingkat tinggi lainnya. Hal ini lah yang membuat C menjadi sederhana dan hasil programnya terbukti efisien dan cepat. Tetapi jika pembuat program tidak hati-hati, buffer overflow akan mudah sekali muncul.

Mari kita coba lihat program yang menciptakan buffer overflow.

// program_name : overflow.c

void buffer_overflow (char *str) {
   char buffer[20];

   strcpy (buffer, str);   // Fungsi ini mengkopi str -> buffer
}

int main () {
   char mystring[128];
   int i;

   for (i=0; i<128; i++)
       mystring[i]=’A';

   buffer_overflow(mystring);
}

Yang perlu kita perhatikan adalah fungsi buffer_overflow(). Fungsi ini mengkopi apa pun parameternya ke variabel lokal, buffer. Variabel lokal hanya memili 20 byte, sedangkan buffer yang dikopi dari fungsi main memiliki 128 byte. Hal ini akan menyebabkan buffer overflow pada saat fungsi strcpy() dijalankan. 108 byte yang tidak tertampung di dalam variabel lokal akan menghapus memori apa pun yang berada setelah variabel buffer, tidak perduli apakah memori itu kosong atau tidak.

Jika program dijalankan, maka akan muncul hasil seperti di bawah ini:

$gcc -o overflow overflow.c
$./overflow
Segmentattion fault
$

Program crash disebabkan oleh buffer overflow ini. Bagi programmer, program-program seperti ini sering dijumpai dan mudah untuk diperbaiki. Seringkali terjadi bahwa programmer berasumsi bahwa input dari user sepanjang yang telah ditentukan. Tapi mereka kadang lupa bahwa hacking selalu menggunakan pola pikir yang tidak biasa dan tidak seperti yang diduga-duga. Karenanya, seorang hacker yang pintar dapat mengakibatkan program berhenti bekerja (crash) dengan cara memasukkan input-input yang tidak diantisipasi sebelumnya.

Lantas bagaimana kah cara mendapatkan kontrol dari program dengan memanfaatkan buffer overflow ini? Kita akan menjawabnya di artikel berikut ini.

Memahami Cara Kerja Memori Komputer Sebagai Dasar Memahami Teknik Eksploitasi 2/2

September 14th, 2008

Kita akan melanjutkan pembahasan mengenai memori. Kali ini pembahasan akan lebih difokuskan kepada segmentasi dalam memori terutama pada bagian stack.

Segmen Dalam Memory

Memori program terbagi atas 5 segmen: text, data, bss, heap, dan stack. Masing-masing segmen mempunyai tempat yang khusus dalam memori untuk mencapai tujuan yang khusus.

Read the rest of this entry »

Memahami Cara Kerja Memori Komputer Sebagai Dasar Memahami Teknik Eksploitasi 1/2

September 13th, 2008

Akhir-akhir ini banyak sekali beredar tools yang dapat digunakan untuk eksploitasi, salah satunya sebut saja Metasploit. Tetapi menggunakan tools tanpa mengerti apa sebenarnya yang dilakukan tools itu, bagi seorang hacker sejati bukanlah suatu hal yang baik. Lantas apakah hubungan antara memori komputer dengan teknik eksploitasi? Pada dasarnya, eksploitasi itu dilakukan terhadap program-program yang terinstal di komputer. Program-program ini bila dieksekusi tidak dengan sebagai mana mestinya, dapat mengakibatkan hal yang fatal untuk seluruh sistem, seperti memberikan izin masuk sebagai Root kepada hacker. Lantas bagaimana cara mengenali dan mengeksploitasi program-program tersebut? Nah, di situ lah letak hubungan antara memori komputer dengan eksploitasi. Program-program ini menggunakan memori dalam pengeksekusiannya. Seorang hacker yang baik, harus dapat mengenali bagian dari memori yang digunakan oleh program, dan dengan begitu akan dapat segera mengetahui kejanggalan apa yang dilakukan oleh program sehingga dapat membuat eksploit yang tepat untuk program tersebut.

Awalnya terkesan sangat sulit untuk memahami cara kerja memori komputer. Tapi, ingat saja, komputer itu hanyalah sebuah kalkulator raksasa yang memiliki memori sebagai tempat sementara untuk menyimpan hasil perhitungan. Tempat-tempat ini diberikan indeks nomor (alamat) untukmemudahkan penggunaannya. Bayangkan saja, prosesor Intel x86 yang banyak digunakan saat ini menggunakan 32-bit skema alamat. Itu berarti ada 2^32 (4,294,967,296) kemungkinan tempat yang dapat digunakan sebagai tempat penyimpanan hasil perhitungan tersebut.

Read the rest of this entry »

Netcat

September 13th, 2008

Netcat merupakan software sederhana untuk menginisiasi dan menerima koneksi paket TCP atau UDP. Program ini didisain untuk menjadi “back-end” tool, yaitu program yang dapat digunakan oleh program atau script lain. Program ini dapat didownload secara gratis dari : http://netcat.sourceforge.net/

Bagaimana cara penggunaannya? Apa saja yang dapat dilakukan dengan tool ini? Mari kita bahas satu per satu.

Read the rest of this entry »

Dasar-dasar Port Scanning

September 7th, 2008

Bagaimanakah sebenarnya tools port-scanning seperti Nmap, Superscan, Strobe, dan lain sebagainya menentukan apakah suatu host dapat diakses atau tidak? Kali ini, saya akan mencoba menjelaskan dasar-dasar metode yang digunakan tools untuk port-scanning.

Read the rest of this entry »

Port Scanner : Nmap

September 6th, 2008

Hari ini kita akan membahas Nmap. Nmap (”Network Mapper”) merupakan software open source gratis yang digunakan untuk eksplorasi suatu jaringan komputer dan pemeriksaan sekuriti jaringan. Software ini bisa didapatkan secara gratis dari website http://nmap.org/.

Nmap didisain untuk eksplorasi jaringan network yang luas, walaupun begitu software ini tetap bekerja dengan baik untuk hanya beberapa komputer atau bahkan satu komputer sekali pun. Nmap menggunakan IP raw paket untuk menentukan apakah komputer dapat diakses dalam suatu jaringan, tipe-tipe filter atau firewall yang digunakan, OS (dan versinya), dan banyak hal lain.

Ada beberapa teknik yang sering dipakai dalam menggunakan Nmap untuk men-scan jaringan komputer, diantaranya adalah sebagai berikut: (lengkapnya, dapat dilihat di sini )

Read the rest of this entry »

Komputer dan Teknik Eksploitasi Hacker

September 6th, 2008

Sebelumnya, saya ingin menjelaskan, dalam blog ini kata ‘hacker’ dan ‘cracker’ terkadang digunakan untuk menunjukkan hal yang sama. Saya mengerti banyak pembaca kritis yang tidak setuju dengan penggunaan kata ‘hacker’ untuk mengartikan orang yang suka masuk ke dalam jaringan komputer orang lain demi keuntungan sendiri. Pembaca-pembaca kritis ini lebih senang menggunakan kata ‘cracker’ untuk menunjuk orang-orang seperti itu. Karena terkadang para hacker (white hacker) juga menggunakan teknik-teknik yang digunakan dalam blog ini, saya akan mengeneralisasi kata hacker dan cracker. Harap maklum ya.

Seperti banyak dibahas di buku-buku tentang sekuriti komputer, teknik yang digunakan dalam mengeksploitasi komputer terbagi atas beberapa tahapan:

  • Pengumpulan Informasi
  1. Port Scanning
  2. Pengumpulan Informasi tentang Platform
  3. Pencarian Kelemahan Sistem 
  • Pengambilan Hak Akses
  1. Pengeksploitasian Lubang Sekuriti (Security Hole)
  2. Cracking Password
  3. Sniffing
  • Akses dan Penghapusan Jejak
  1. Pembuatan Backdoor
  2. Penghapusan Log

Peralatan-peralatan (tools) untuk masing-masing tahapan pun sudah semakin canggih. Kita bisa mendapatkan informasi mengenai tools terbaru untuk sekuriti komputer dari website ini http://sectools.org/ . Tetapi, untuk dapat menggunakan tools tersebut, kita tidak boleh langsung menggunakannya pada sistem orang lain. Cobalah tool-tool ini pada jaringan komputer kita sendiri.