Kamis, 05 Januari 2012

Memahami Cara Kerja Serangan DoS (Denial of Service) Attack

Serangan DoS (Denial of Service) tampaknya masih mejadi favorit hacker. Karena boleh dikatakan serangan DoS ini tidak ada obatnya. Bila serangan DoS ini dilakukan secara beramai-ramai dan terorganisir dengan baik, maka akan menghasilkan kerusakan yang dahsyat dan sanggup melumpuhkan situs-situs populer seperti twitter.com danmetasploit.com.

Apa itu DoS
Denial of service adalah jenis serangan yang tujuannya adalah mencegah pengguna yang sesungguhnya menikmati layanan yang diberikan server. Server sesuai namanya adalah pelayan yang harus selalu siap melayani permintaan pengguna, yang umumnya beroperasi 24 jam tanpa henti. Contohnya adalah web server yang bertugas melayani pengunjung web menyediakan informasi dalam bentuk halaman html. Dalam kondisi normal, pengunjung dapat meminta resource dari web server untuk ditampilkan dalam browsernya, namun bila web server terkena serangan DoS maka pengunjung tidak bisa menikmati layanan web server.

Secara umum ada 2 cara melakukan serangan DoS:
1. Mematikan Server
2. Menyibukkan Server
        a. Tanpa bug/vulnerability
        b. Meng-exploit bug/vulnerability

DoS dengan Mematikan Server: Kill Them!

Anda pernah mengalami ingin memakai telepon umum atau ATM namun tidak bisa karena di mesin tersebut ditempel kertas berisi pesan “Out of Service” atau “Sedang dalam perbaikan”. Telepon umum adalah target serangan DoS yang biasa terjadi, dimana-mana kita menemukan telpon umum yang rusak karena serangan DoS seperti membanting gagang telpon, mencabut kabel, memecahkan LCD dan aksi-aksi lainnya.
Tujuan serangan ini adalah membuat server shutdown, reboot, crash, “not responding”. Jadi serangan ini menghasilkan kerusakan yang sifatnya persisten artinya kondisi DoS akan tetap terjadi walaupun attacker sudah berhenti menyerang, server baru normal kembali setelah di-restart/reboot.
Bagaimana cara serangan DoS ini dilakukan? Serangan ini dilakukan dengan meng-exploit bug/vulnerability pada server. Kata kunci pada vulnerability jenis ini biasanya adalah “specially/carefully crafted packet/request”, yang artinya paket yang dirancang khusus. Kenapa dirancang khusus? Sebab dalam paket itu mengandung  sifat tertentu yang membuat server mati ketika mengolah paket khusus itu.

Mari kita perhatikan beberapa contoh vulnerability yang berakibat pada DoS attack:

    i) Ping of Death ( CA-1996-26 )
       Ini adalah jenis bug yang sudah sangat tua. Praktis sudah tidak ada lagi sistem yang vulnerable terhadap bug ini. Bug ini bila diexploit akan membuat server crash, freeze atau reboot. Serangan ini dilakukan dengan mengirimkan “specially crafted” paket berupa oversized ICMP packet, yaitu paket yang ukurannya di atas normal. Ketika server menerima dan memproses paket yang “aneh” ini, maka server akan crash, freeze atau reboot. Ini adalah contoh serangan DoS “one shot one kill” karena bisa merusak server hanya dengan satu tembakan saja.

    ii) MySQL IF Query DoS ( SA25188 )
    Bug ini akan membuat mysql server menjadi crash hanya dengan mengirim sql khusus yang mengandung fungsi IF() contohnya: “SELECT id from example WHERE id IN(1, (SELECT IF(1=0,1,2/0)))”. Ini juga jenis serangan “one shot one kill”.

    iii) Cisco Global Site Selector DNS Request Denial of Service (SA33429)
    Bug ini membuat DNS server Cisco mati dengan mengirimkan beberapa “specially crafted” paket request DNS dalam urutan tertentu.

Tiga contoh di atas kiranya cukup memberikan gambaran tentang bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah attacker memanfaatkan (baca:mengexploit) bug yang membuat server berhenti bekerja dan biasanya dilakukan sendirian secara remote dengan mengirimkan specially crafted packet.

DoS dengan Menyibukkan Server: Make Them As Busy As Possible!

Pada waktu menjelang lebaran kita sering merasa begitu sulit mengirim sms, bahkan sering terjadi gagal kirim. Begitu juga ketika berlangsung acara kuis di TV, mengelpon ke nomor untuk menjawab kuis terasa begitu sulit.  Hal ini terjadi karena ada begitu banyak orang yang mengirim sms pada saat lebaran dan menelpon pada waktu kuis sehingga membuat jaringan telekomunikasi menjadi begitu sibuk sampai tidak bisa melayani pengguna lain. Peristiwa itu mirip dengan yang terjadi ketika sebuah server mendapat serangan denial of service. DoS yang terjadi pada peristiwa tersebut bukan jenis DoS yang mematikan server, namun jenis DoS yang menyibukkan server.
Jenis DoS ini bersifat sementara, server akan kembali normal bila attacker berhenti mengirimkan request yang membuat sibuk server.

DoS jenis ini terbagi lagi menjadi 2 jenis berdasarkan cara melakukan serangan:

   i) Exploiting vulnerability: Menyerang dengan malicious request/packet
   ii) No vulnerability exploitation: Menyerang dengan normal request/packet

Membuat server sibuk dengan mengexploitasi vulnerability lebih cepat daripada tanpa mengeksploit vulnerability.

Make Server Busy by Exploiting Vulnerability

Dalam serangan DoS jenis ini, attacker memanfatkan bug yang membuat server berlebihan dalam menggunakan resource (cpu,memory,disk space dsb). Attacker akan mencari cara bagaimana agar membuat server bekerja ekstra keras (jauh lebih keras dari request normal) untuk melayani request dia. Biasanya serangan DoS jenis ini tidak berupa serangan “one shot one kill”. Serangan dilakukan dengan melakukan banyak request dengan setiap request membuat server mengonsumsi lebih banyak resource dari request yang normal.
Dalam hitungan matematika sederhana, bila attacker bisa membuat server bekerja selama 10 detik  hanya untuk melayani dia (misal normalnya 0,1 detik), maka attacker bisa mengirimkan request 1.000x untuk membuat server melayani dia selama 10.000 detik (2,7 jam lebih) sehingga membuat pengguna lain tidak bisa menikmati layanan server.

Untuk lebih memahami DoS jenis ini, mari kita lihat contoh-contoh vulnerability yang bisa diexploit untuk melancarkan serangan DoS jenis ini:

    a. TCP SYN Flood DoS
    Ini adalah serangan DoS yang sudah sangat tua. Attacker menyerang dengan cara membanjiri server 
    dengan malicious request berupa paket SYN dengan fake source IP address. SYN packet adalah paket  dari client yang mengawali terbentuknya koneksi TCP/IP, setelah itu server akan membalas dengan SYN-ACK,  dan dilengkapi dengan paket SYN-ACK-ACK dari client, tiga proses ini disebut three way handshake. Triknya adalah pada fake source ip address pada paket SYN dari client. Akibatnya server akan mengirim SYN-ACK (step 2) ke ip address yang salah sehingga server juga tidak akan mendapatkan balasan  SYN-ACK-ACK dari client. Padahal untuk setiap client yang mencoba membuka koneksi, server  
akan mengalokasikan resource seperti memori dan waktu untuk menunggu datangnya balasan ACK dari client. 
   Dengan cara ini attacker menghabiskan resource server hanya untuk melayani request palsu dari attacker.
    b. Apache mod_deflate DoS
    Apache menggunakan mod_deflate untuk memampatkan file. Bila visitor meminta sebuah file, maka apache akan menggunakan mod_deflate untuk memampatkannya kemudian mengirimkan ke visitor tersebut. Namun bila di tengah proses pemampatan, visitor memutuskan koneksi TCP, Apache masih terus bekerja memampatkan file untuk visitor yang sebenarnya sudah tidak ada (sudah disconnect). Jadi bugnya adalah pada borosnya pemakaian resource cpu untuk memampatkan file untuk client yang sudah tidak ada.
    Attacker memanfaatkan kelemahan ini dengan meminta sebuah file yang berukuran besar, kemudian dalam waktu singkat memutuskan koneksi sehingga membuat server bekerja keras mempatkan file untuk visitor yang sudah tidak ada. Request ini diulang berkali-kali sampai server begitu sibuknya dan semua resource cpu habis.

Dua contoh vulnerability di atas cukup menjelaskan bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah dengan mengirim banyak malicious request/paket  yang membuat server mengonsumsi resource lebih banyak dan lebih lama untuk setiap requestnya.

Make Server Busy Without Exploiting Vulnerability

Ini adalah jenis serangan yang mengandalkan pada kemampuan mengirimkan normal request sebanyak-banyaknya sehingga server menjadi sibuk. Perbedaan DoS jenis ini dengan DoS yang mengexploit vulnerability adalah pada requestnya. Request yang dikirimkan pada DoS jenis ini adalah request yang normal seperti yang dilakukan pengguna biasa, sehingga server tidak mengonsumsi resource berlebihan. Sedangkan DoS yang mengandalkan vulnerability mengirimkan specially crafted malicious request untuk membuat server mengonsumsi resource lebih banyak untuk melayani malicious request tersebut.
Normal request hanya membuat server mengonsumsi resource dalam jumlah biasa-biasa saja, tidak akan mengganggu kerja server secara keseluruhan. Diperlukan normal request dalam jumlah yang sangat banyak untuk membuat server terganggu kerjanya. Jadi agar serangan ini menjadi efektif, maka serangan harus dilakukan beramai-ramai dari banyak tempat, semakin banyak penyerang semakin bagus hasilnya. Serangan ini juga disebut dengan distributed DoS (DDoS) karena dilakukan dari banyak lokasi yang terdistribusi (tersebar).
Serangan DDoS dilakukan dengan menggunakan komputer zombie atau robot. Zombie adalah komputer yang sudah dikuasai attacker sehingga bisa dikendalikan dari jarak jauh. Sekumpulan komputer zombie membentuk jaringan yang disebut bot-net. Attacker mendapatkan banyak zombie dengan menyebarkan virus atau worm, setiap komputer yang terinfeksi akan diinstall program yang membuat komputer bersedia menjalankan perintah dari attacker.



Gambar di atas menjelaskan cara kerja DDoS. Attacker memberi perintah kepada semua pasukannya untuk membuat request HTTP ke sebuah website. Bila pasukan yang dikuasai attacker sangat besar, maka web server akan dibanjiri request sehingga menjadi terlalu sibuk dan tidak bisa diakses oleh pengguna yang sebenarnya (real visitor).
Serangan jenis ini tidak ada obatnya karena attacker tidak meng-exploit bug atau vulnerability apapun. Bila pada jenis DoS yang lain, serangan dapat dicegah dengan melakukan patching atau update software, maka serangan ini tidak bisa dihentikan dengan update atau patch.


Kesimpulan

Denial of service adalah serangan yang membuat server tidak bisa melayani pengguna yang sesungguhnya. Berikut adalah jenis-jenis serangan DoS berdasarkan cara melakukan serangan:

    a) Mematikan Server: one shot, one kill untuk membuat server menjadi crash, hang, reboot.
    b) Menyibukkan Server: mengirim banyak sekali request untuk membuat server sibuk.
        - Exploiting bug: mengirim banyak specially crafted request. Jumlah request tidak sebanyak jenis DoS yang menyibukkan server dengan normal request.
        - Normal request: mengirim banyak request normal seperti pengguna biasa. Diperlukan jumlah request yang lebih banyak dibandingkan jenis DoS yang menyibukkan server dengan exploit bug. Biasanya menggunakan botnet secara terdistribusi.

Perbedaan Antara Linux dan Windows Shared Hosting

Di dunia shared hosting, server hosting Linux dan Windows merpakan dua posisi teratas yang banyak di tawarkan. Merskipun kalau kita lihat sekilas mempunyai fungsi yang sama. Namun perlu anda ketahui, ada perbedaan antara linux dan windows shared hosting.

1. Sistem Operasi: Linux hosting dapat berjalan pada OS linux seperti Ubuntu, Redhat, CentOS, Debian dll. Sedangkan Windows menggunanakan Windows Server. Tapi ini bukanlah suatu hal yang penting untuk diperhatikan karena anda dapat memilih salah satu Operating sistem yang menurut anda paling mudah / disukai.
2. Security / Keamanan: Ini merupakan hal yang vital bagi semua orang yang menggunakan jasa hosting, baik itu yang menggunkan Linux ataupun windows. Tetapi pada saat sekarang ini, banyak orang yang memiliki persepsi kalau linux itu jauh lebih aman dibandingkan dengan windows, padahal itu salah besar. Windows juga sebenarnya memiliki keamaanan yang canggih dan selalu terupdate, hanya semua itu tergantung kepada perusahaan yang menyediakan jasa layanan hosting tersebut. Apakah perusahaan tersebut dapat memberikan keamanan yang baik untuk layanan hostingnya.
3. Cost / Biaya: Kita semua tentu sudah tahu kalau hampir semua OS linux adalah open source alias bebas biaya. Ini mungkin salah satu keunggulan kenapa banyak perusahaan yang menggunakan linux sebagai server karena tak perlu mengeluarkan biaya untuk membayar lisensi. Sedangkan Windows, segala sesuata perlu mengeluarkan duit untuk meng-Install service ke windows, hal ini tentu memberatkan di sisi biaya. (tetapi hukum pasar tetap berlaku, ada uang pasti ada kualitas.... tapi sampai sekarang saya masih belum tau apa kelebihannya... hehe.. )
4. Performance / kinerja: Linux pada umumnya lebih stabil dan mampu memberikan kinerja yang lebih baik dibandingkan dengan windows ketika Sistem Operasi dituntut untuk menangani banyak proses dalam waktu yang sama.
5. Server Access / Akses server: Jika anda ingin SSH or Telnet access, seperti anda ingin melakukan akses file langsung ke server tanpa mentransfer ke penyimpanan lokal, tentu linux memberikan keuntungan lebih. Sedangkan untuk windows lebih mengunggulkan dengan menggunakan remote desktopo atau virtual console.
6. Language support / dukungan bahasa: Yang dimaksud bahasa disini adalah bahasa pemrograman yang di dukung dari Linux dan Windows. Dalam hal dukungan bahasa pemgrograman, nampaknya windows masih lebih unggul. Di windows, kita dapat mengimplementasikan bahasa ASP.NET, PHP, Ruby, Access, MySQL, HTML, Javascript, dan banyak lagi. Sedangkan linux terbatas hanya beberapa bahasa pemrograman yang open source saja.
7. FileNames / Nama File: Jika anda menggunakan server Linux, nama file seperti test.html dan Test.html adalah nama yang berbeda tetapi pada server Windows mereka adalah nama file yang sama.
8. Ease of User / Kemudahan penggunaan: Jika anda lebih menyukai tampilan GUI, mungkin windows adalah pilihan yang tepat. Tapi jika anda penyuka CUI (alias console) mungkin linux adalah pilihan yang tepat. Tapi pada umumnya banyak yang ahli jaringan / server lebih menyukain menggunakan console dibandingkan dengan GUI.
9.Downtime: Server hosting Windows sering membuang waktu yang berharga dari para penggunanya dikarenakan downtime yang lebih lama dibandingkan dengan linux. Selainitu, Windows lebih membutuhkan sumber daya (hardware) yang lebih besar untuk memulai suatu proses, ini berarti saat melakukan reboot windows akan memakan waktu yang lebih lama.

Sekarang mungkin anda telah mendapat gambaran akan perbedaan antara menggunakan hosting Linux dan Windows, mungkin saja ini bisa menjadi acuan manakah yang paling tepat layanan hosting yang akan digunakan sebagai investasi dari bisnis anda yang paling menguntungkan dari segi finansial, waktu, dan biaya.

Paradigma Pemrograman Berorientasi Objek

1. OO Sebagai Paradigma Pemrograman
    - Paradigma pemrograman: cara pandang terhadap penyelesaian masalah pemrograman
    - Pemrograman berorientasi obyek (OOP) didasarkan pada konsep object dan interaksinya

2. Konsep Object
    Dalam paradigma berbasis object, “object” adalah representasi sebuah entitas yang memiliki makna
    tertentu yang menjadi perhatian si pemandang ? object memiliki abstraksi tertentu bagi si pemandang
        Contoh: dalam sistem akademik di kampus, beberapa kandidat object adalah: mahasiswa, dosen,kelas, 
         mata kuliah, kurikulum, praktikum, laboratorium, perpustakaan, KRS, KHS, …
   Object dapat menerima pesan (message), mengolah data, dan mengirimkan pesan ke object lain ?
    membentuk interaksi antar object
   Object bersifat independen: tiap object dapat dipandang sebagai sebuah entitas mandiri yang memiliki peran  atau tanggung jawab tertentu
3. Object dan Interaksinya


Skenario: restoran cepat-saji

4. Object dan Representasi Lingkup Permasalahan
    Object dan interaksinya dapat digunakan untuk merepresentasikan lingkup permasalahan
        - Object merepresentasikan entitas-entitas yang dianggap penting dalam skenario permasalahan
        - Interaksi antar object menggambarkan bentuk-bentuk relasi antar entitas di dalam skenario     permasalahan
    OO sebagai tool untuk memodelkan sistem di dunia nyata (tujuan bahasa Simula-67) menjadi setiap sistem  selalu dapat digambarkan melalui object-object penyusunnya dan bagaimana object-object tersebut saling berinteraksi
    Dalam software engineering: OO analysis menjadi OO design kemudian menjadi OO programming

5. Kelebihan OO Sebagai Model Representasi
    Natural: mengikuti cara berpikir manusia (manusia memandang dunianya sebagai kumpulan object yang     
    berinteraksi)
   Abstraksi: menjelaskan makna sebuah entitas secara cepat dan mudah
   Enkapsulasi: dapat menyembunyikan detil yang tidak perlu
   Modular: object adalah entitas yang independen

6. Pemrograman dan Bahasa Pemrograman Berbasis OO
    Merealisasikan entitas-entitas object dalam desain software (OOD) dalam bahasa pemrograman
    Bahasa pemrograman berbasis object menyediakan mekanisme untuk bekerja dengan:
    kelas dan object
    methods
    inheritance
    polymorphism
    reusability

7. Konsep-Konsep dalam OOP: Kelas (Class)
    Mendefinisikan karakteristik abstrak dari sebuah entitas
    Property (statis) – fields, atribut
    Behaviour (dinamika) – fitur, methods
   Contoh: abstraksi “sepeda” memiliki property “punya roda”, “punya rantai”, dsb., dan behaviour “bisa      
   berjalan”, “bisa berbelok”, dsb.
   Sebagai abstraksi dari sebuah entitas, definisi kelas harus mencerminkan karakteristik sebenarnya dari   
   entitas tsb.

    a. Kelas
    Kelas merupakan “cetakan” (template) untuk instance (wujud nyata) entitas-entitas yang
    direpresentasikannya
       Sebuah kelas dapat melahirkan lebih dari satu instance

  b. Object
    Sebuah instance (perwujudan nyata) dari suatu kelas tertentu
    c. Inheritance (Pewarisan Sifat)
    Dalam dunia OO, beberapa object memiliki sifat/ciri yang mirip dengan yang lain ? sebuah kelas object
    dapat didefinisikan dari kelas yang lain
       Kemiripan ini membentuk hubungan sifat yang bersifat hirarkis
      “pesawat penyergap adalah sebuah pesawat terbang yang dilengkapi dengan persenjataan dan dapat  
        terbang melebihi kecepatan suara”
      “pesawat penyergap” memiliki ciri yang sama dengan “pesawat terbang” ? “pesawat penyergap” mewarisi  sifat “pesawat terbang”
      “pesawat penyergap” memiliki ciri yang lebih khusus dibandingkan “pesawat terbang” ? “pesawat  
        penyergap” adalah subclass dari “pesawat terbang”
       Dalam OOP, hubungan inheritance (pewarisan sifat) ini diimplementasikan melalui definisi kelas: sebuah kelas dapat didefinisikan dari kelas yang lain

   

  Dalam pohon hirarki inheritance, sebuah subclass mewujudkan abstraksi yang lebih spesifik dari superclassnya: subclass = superclass + (fitur-fitur baru)
     Subclass dapat menambahkan fields dan methods baru
     Subclass dapat mengambil alih (override) method milik superclass dan mengubah implementasi method tersebut

    Manfaat inheritance:
    Pemanfaatan kembali (reuse) kelas
    Menyediakan model yang bersifat generik (abstract class); implementasi spesifiknya bisa dilakukan  
    kemudian (mungkin oleh pemrogram yang berbeda)

   d. Enkapsulasi
    Enkapsulasi menyembunyikan property dan behaviour object dari pihak luar (object yang lain) menjadi   
    object lain melihat object ini sebagai “black box” saja

  e. Polymorphism
    Poly: banyak; morphism: bentuk ? sebuah fitur (generik) bisa diimplementasikan dengan berbagai cara
     Polymorphism diimplementasikan dengan mekanisme inheritance