Asal Mulanya
Belakangan ini muncul sebuah tools baru, lebih tepatnya extension untuk salah satu browser terkenal Mozilla Firefox yang dinamai Firesheep. Sebetulnya bagaimanakah dan seperti apakah cara kerja dari tools ini?dan mengapa kita sebagai pengakses internet harus mewaspadai keberadaan tools ini di dalam jaringan Wi-Fi?
Ketika kita login kedalam suatu alamat server website(misalnya : Facebook), setelah melakukan proses login dan berhasil masuk, sebetulnya komputer kita telah diberikan suatu penanda oleh server yang disebut dengan "Session Cookies". Berikut kira-kira gambaran dari proses tersebut:
Setiap Session Cookies yang dikirimkan oleh server pasti unik dan tidak mungkin ada yang sama, kecuali ada orang yang melakukan replikasi/duplikasi Session Cookies tersebut yang akhirnya disebut sebagai Session Sidejacking. Karena setiap data yang dikirimkan ke internet dan tidak di-enkripsi, data tersebut dapat dibaca dan dilihat oleh orang lain misalnya HTTP. Sedangkan data yang ter-enkripsi data tersebut tidak dapat dibaca oleh orang lain; misalnya menggunakan SSL(Secure Socket Layer atau https) dan SSH(Secure Shell)
Lalu apakah Firesheep Itu?
Firesheep adalah sebuah Firefox extension yang berguna untuk melakukan Session Sidejacking atau pencurian/penduplikasian Session Cookies.
Firesheep amat sangat mudah sekali untuk digunakan. Anda bisa lihat tutorial langkah-langkahnya disini http://vishnuvalentino.com/computer/...jacking-tools/, bahkan untuk orang awam yang baru mengetahui beberapa istilah jaringan, pastilah bisa menggunakan tools ini, karena memang hanya bermodal laptop/komputer yang memiliki wireless yang memiliki kemampuan promiscious mode(misal : Atheros, Orinocco), lalu klik sana-sini dan berhasil, benar-benar mudah. Oleh karena itu banyak orang menganggap ini adalah suatu ancaman yang serius.
Lalu Bagaimana Mengatasi Serangan Firesheep Session Sidejacking ini?
Ada beberapa langkah yang dapat dilakukan oleh user untuk menghindari/berusaha meminimalisir tipe serangan ini, karena tools diluar sana selain Firesheep untuk melakukan Session Sidejacking sangat banyak.
1. Usahakan jangan gunakan fasilitas "Remember Me" pada aplikasi web kalau anda ada di dalam suatu jaringan, khususnya Wi-Fi area. Bisa-bisa sudah pulang rumah, si penyerangnya lagi asyik liat2 profil pic anda
2. Bisa juga menggunakan Blacksheep untuk melihat keberadaan dari orang-orang jahil yang sedang menggunakan tools Firesheep. Untuk lebih jelasnya bisa dilihat disini gan http://vishnuvalentino.com/computer/...for-firesheep/
3. Anda bisa gunakan SSH(Secure Shell) tunneling, cuman ini agak beribet dan lumayan nambah biaya
Kira-kira seperti itu gambarannya, mudah-mudahan informasi ini berguna.. =)
Link Lain : http://www.kaskus.us/showthread.php?p=314681559
Sumber : http://vishnuvalentino.com/computer/...jacking-tools/
Disadur dari pengalaman sendiri, dan saya yakin ini berguna buat para linuxer yang baru belajar.
Beberapa waktu yang lalu saya sempet nulis ampe panjang, berhubung internet lagi ga stabil, akhirnya raib dah tuh tulisan
Skrg nulis lagi deh, oiya..tulisan ini jg pernah saya tulis di blog, tapi cuma buat ngidupin NTFS
Ok..skrg yang kita perlukan adalah sebuah sistem yang terinstall linux Slackware 12, kernel linux, dan kompiler pendukung lainnya.
Mari kita mulai..
Silakan isi versi dan revisi sesuai dengan perkembangan kernel saat ini. Daripada bingung, disini saya pake kernel 2.6.23.13.
2. Ekstrak kernel
Asumsi kita berada pada direktori home user, maka silahkan ubah diri sendiri menjadi root.
Code:
$ su
Password:
# pwd
/home/t0m
# tar xjvf linux-2.6.23.13.tar.bz2 -C /usr/src/
# cd /usr/src
# ls
linux linux-2.6.21.5 linux-2.6.23.13 slackbuilds
#
3. Tahap Pertama Kompile
Karena kita hanya akan meng-upgrade kernel pada saat ini, jadi silahkan copy config kernel yang lama dari direktori /boot.
Code:
4. Membuat Sym-link arsip kernel baru
Pada bagian ini juga kita perlu membuat symbolic link (shortcut) buat kernel linux yang baru. Sebelumnya hapus dulu symbolic link yang dibuat oleh Slackware (default).
Code:
# rm linux
# ln -s linux-2.6.23.13 linux
Klo udah, silahkan masuk ke direktori linux, lalu lakukan kompile disana. Meng-kompile bisa ada beberapa pilihan:
make menuconfig (modus text)
make xconfig (modus grafik, QT)
make gconfig (modus grafik, GTK)
make oldconfig (modus text pake konfigurasi kernel yang lama)
5. Mengkompile Kernel
Pada kesempatan kali ini, saya menggunakan make menuconfig, karena bisa dilakukan selama kompile r gcc terinstall. Kelebihan Linux terletak pada kesempurnaan konfigurasi sistem berbasis text, hampir semua administrasi sistem dapat dilakukan lewat konsole (tentu akan berakibat fatal apabila sistem tersebut diambil alih oleh hacker, bisa dibayangkan bukan?! )
Code:
# make menuconfig // langsung di save lagi
# make bzImage // untuk membuat image kernel
# make modules // mengkompile module
# make modules_install // install module
6. Copy Image kernel,config, dan System.map baru
Kalau ditemukan error, silahkan review lagi step-stepnya. Kalau normal dan ga ada masalah, kita akan mengcopy kernel image yang telah di kompile tersebut ke direktori /boot
Code:
# mv arch/i386/boot/bzImage /boot/vmlinuz-2.6.23.13-kernel-baru
# mv System.map /boot/System.map-2.6.23.13-kernel-baru
# cp .config /boot/config-2.6.23.13-kernel-baru
# cd /boot
# rm System.map // Hapus symbolic link System.map lama
# rm config // Hapus symbolic link config lama
# rm vmlinuz // Hapus symbolic link kernel image yg lama
# ln -s vmlinuz-2.6.23.13-kernel-baru vmlinuz //symbolic link kernel baru
# ln -s config-2.6.23.13-kernel-baru config //symbolic link config baru
# ln -s System.map-2.6.23.13-kernel-baru System.map //symbolic link System.Map baru
7. Membuat Initrd
silakan membuat initrd agar kernel dapat meload partisi root. Masih di direktori /boot silakan eksekusi:
Code:
Perhatikan bahwa partisi /dev/hda1 merupakan partisi tempat partisi root berada, jadi sesuaikan dengan masing-masing sistem teman-teman. Cara ceknya bisa dengan perintah fdisk -l atau df -h.
8. Edit Lilo
Merubah Lilo untuk booting ke kernel yang baru.
Code:
# LILO configuration file
# generated by 'liloconfig'
#
# Start LILO global section
boot = /dev/hda
#message = /boot/boot_message.txt
#prompt
#timeout = 1200
# Override dangerous defaults that rewrite the partition table:
change-rules
reset
# VESA framebuffer console @ 1024x768x256
vga = 773
# Linux bootable partition config begins
image = /boot/vmlinuz // Pastikan path ke image kernel benar !!
initrd = /boot/initrd.gz
root = /dev/hda1
label = LinuxKrnlBaru
read-only
# Linux bootable partition config ends
# Linux Kernel Dokter jaga 24 jam
image = /boot/vmlinuz-2.6.21.5 // Kernel darurat, klo yang baru gagal !
initrd = /boot/initrd.gz
root = /dev/hda1
label = LinuxICU
read-only
# Linux bootable partition config ends
Kalau sudah, reload Lilo dengan mengetik:
Code:
# lilo -v
9. Saatnya mencoba kernel baru
Melakukan reboot adalah saat-saat yang mendebarkan, berdoa dulu juga boleh
Apabila ada kesalahan (mudah-mudahan ga ada ya ) silakan pilih LinuxICU untuk boot ke kernel yang lama
Seringkali ketika kita menemukan kerawanan ataupun missconfiguration pada system sendiri, kita akan menganggap hal itu adalah hal yang kecil, karena kita menanggapinya bukan sebagai lubang keamanan. Tools maupun teknik yang digunakan cracker kebanyakan adalah variasi dari serangan yang mereka lakukan sebelumnya. Sebagai Administrator baik system maupun jaringan ataupun end user, Anda haruslah banyak belajar dari pengalaman penyerangan yang terjadi sebelumnya (walaupun serangan tersebut terjadi pada orang lain) untuk menghindari serangan yang akan terjadi berikutnya.
Mengetahui jenis serangan sangat penting untuk menjaga stabilitas system, sehingga anda tidak perlu repot untuk menginstall system baru agar lebih aman, anda hanya perlu mempatch atau bahkan sedikit mengkonfigurasi system anda Mungkin bagi beberapa orang tulisan ini merupakan tulisan yang sangat mendasar, tapi tidak ada salahnya jika anda sebagai seorang Profesional untuk mereview sesuatu yang dasar dari waktu ke waktu.. Artikel ini bukan ditujukan untuk menyerang tetapi sebaliknya yaitu untuk bertahan, karena menurut hemat saya untuk bertahan anda harus tahu cara menyerang. Dalam artikel ini terdapat serangan yang sering dilakukan oleh cracker dan disetiap serangan mempunyai metode-metode tersendiri, contohnya saja dalam melakukan IP spoofing yang mempunyai banyak metode diantaranya man in the middle attack. Dengan alasan diatas saya akan mencoba menggaris besarkan seranganserangan umum yang sering dilakukan cracker dan harus diketahui oleh seorang Administrator maupun end user, sedangkan metode-metode yang lebih spesifik mungkin akan saya tuangkan dalam tulisan saya berikutnya baik itu penyerangan ataupun metode yang dilakukan untuk bertahan. Saya tahu tulisan berikut adalah jauh dari sempurna, untuk itu saran dan kritik sangat saya harapkan.
IP Spoofing
IP Spoofing juga dikenal sebagai Source Address Spoofing, yaitu pemalsuan alamat IP attacker sehingga sasaran menganggap alamat IP attacker adalah alamat IP dari host di dalam network bukan dari luar network. Misalkan attacker mempunyai IP address type A 66.25.xx.xx ketika attacker melakukan serangan jenis ini maka Network yang diserang akan menganggap IP attacker adalah bagian dari Networknya misal 192.xx.xx.xx yaitu IP type C. IP Spoofing terjadi ketika seorang attacker ‘mengakali’ packet routing untuk mengubah arah dari data atau transmisi ke tujuan yang berbeda. Packet untuk routing biasanya di transmisikan secara transparan dan jelas sehingga membuat attacker dengan mudah untuk memodifikasi asal data ataupun tujuan dari data. Teknik ini bukan hanya dipakai oleh attacker tetapi juga dipakai oleh para security profesional untuk men tracing identitas dari para attacker Protokol yang menangani komunikasi antar komputer kebanyakan berhasil di spoof. ICMP (Internet Control Message Protocol) adalah salah satunya(vulnerable) karena protokol ini dilewati oleh informasi dan pesan-pesan kesalahan diantara dua node dalam network. Internet Group Message Protocol(IGMP)
dapat dieksploitasi dengan menggunakan serangan tipe ini karena IGMP melaporkan kondisi kesalahan pada level user datagram, selain itu juga protokol ini mengandung Informasi routing dan Informasi Network. (UDP) User Datagram Protocol juga dapat ‘diminta’ untuk menampilkan identitas host sasaran.
Solusi untuk mencegah IP spoofing adalah dengan cara mengamankan packet-packet yang ditransmisikandan memasang screening policies. Enkripsi Point-to-point juga dapat mencegah user yang tidak mempunyai hak untuk membaca data/packet. Autentikasi dapat juga digunakan untuk menyaring source yang legal dan bukan source yang sudah di spoof oleh attacker. Dalam pencegahan yang lain, Admininistrator dapat menggunakan signature untuk paket-paket yang berkomunikasi dalam networknya sehingga meyakinkan bahwa paket tersebut tidak diubah dalam perjalanan.
Anti Spoofing rules(peraturan anti spoof) yang pada dasarnya memberitahukan server untuk menolak packet yang datangnya dari luar yang terlihat datangnya dari dalam, umumnya hal ini akan mematahkan setiap serangan spoofing.
FTP Attack
Salah satu serangan yang dilakukan terhadap File Transfer Protocol adalah serangan buffer overflow yang diakibatkan oleh malformed command. tujuan menyerang FTP server ini rata-rata adalah untuk mendapatkan command shell ataupun untuk melakukan Denial Of Service.
Serangan Denial Of Service akhirnya dapat menyebabkan seorang user atau attacker untuk mengambil resource didalam network tanpa adanya autorisasi, sedangkan command shell dapat membuat seorang attacker mendapatkan akses ke sistem server dan file-file data yang akhirnya seorang attacker bias membuat anonymous root-acces yang mempunyai hak penuh terhadap system bahkan network yang diserang.
Tidak pernah atau jarang mengupdate versi server dan mempatchnya adalah kesalahan yang sering dilakukan oleh seorang admin dan inilah yang membuat server FTP menjadi rawan untuk dimasuki. Sebagai contoh adalah FTP server yang populer di keluarga UNIX yaitu WU-FTPD yang selalu di upgrade dua kali dalam sehari untuk memperbaiki kondisi yang mengizinkan terjadinya bufferoverflow.
Mengexploitasi FTP juga berguna untuk mengetahui password yang terdapat dalam sistem, FTP Bounce attack(menggunakan server ftp orang lain untuk melakukan serangan), dan mengetahui atau mensniff informasi yang berada dalam system.
Unix Finger Exploits
Pada masa awal internet, Unix OS finger utility digunakan secara efficient untuk men sharing informasi diantara pengguna. Karena permintaan informasi terhadap informasi finger ini tidak menyalahkan peraturan, kebanyakan system Administrator meninggalkan utility ini (finger) dengan keamanan yang sangat minim, bahkan tanpa kemanan sama sekali. Bagi seorang attacker utility ini sangat berharga untuk melakukan informasi tentang footprinting, termasuk nama login dan informasi contact. Utility ini juga menyediakan keterangan yang sangat baik tentang aktivitas user didalam sistem, berapa lama user berada dalam sistem dan seberapa jauh user merawat sistem. Informasi yang dihasilkan dari finger ini dapat meminimalisasi usaha cracker dalam menembus sebuah sistem. Keterangan pribadi tentang user yang dimunculkan oleh finger daemon ini sudah cukup bagi seorang atacker untuk melakukan social engineering dengan menggunakan social skillnya untuk memanfaatkan user agar ‘memberitahu’ password dan kode akses terhadap system.
Flooding & Broadcasting
Seorang attacker bisa menguarangi kecepatan network dan host-host yang berada di dalamnya secara significant dengan cara terus melakukan request/permintaan terhadap suatu informasi dari sever yang bias menangani serangan classic Denial Of Service(Dos), mengirim request ke satu port secara berlebihan dinamakan flooding, kadang hal ini juga disebut spraying. Ketika permintaan flood ini dikirim ke semua station yang berada dalam network serangan ini dinamakn broadcasting. Tujuan dari kedua serangan ini adalah sama yaitu membuat network resource yang menyediakan informasi menjadi lemah dan akhirnya menyerah.
Serangan dengan cara Flooding bergantung kepada dua faktor yaitu: ukuran dan/atau volume (size and/or volume). Seorang attacker dapat menyebabkan Denial Of Service dengan cara melempar file berkapasitas besar atau volume yang besar dari paket yang kecil kepada sebuah system. Dalam keadaan seperti itu network server akan menghadapi kemacetan: terlalu banyak informasi yang diminta dan tidak cukup power untuk mendorong data agar berjalan. Pada dasarnya paket yang besar membutuhkan kapasitas proses yang besar pula, tetapi secara tidak normal paket yang kecil dan sama dalam volume yang besar akan menghabiskan resource secara percuma, dan mengakibatkan kemacetan.
Attacker sering kali menggunakan serangan flooding ini untuk mendapatkan akses ke system yang digunakan untuk menyerang network lainnya dalam satu serangan yang dinamakan Distributed Denial Of Service(DDOS). Serangan ini seringkali dipanggil smurf jika dikirim melaluli ICMP dan disebut fraggles ketika serangan ini dijalakan melewati UDP.
Suatu node (dijadikan tools) yang menguatkan broadcast traffic sering disebut sebagai Smurf Amplifiers, tools ini sangat efektif untuk menjalankan serangan flooding. Dengan melakukan spoofing terhadap network sasaran, seorang attacker dapat mengirim sebuah request ke smurf amplifier, Network yang di amplifiying(dikuatkan) akan mengirim respon kesetiap host di dalam network itu sendiri, yang berarti satu request yang dilakukan oleh attacker akan menghasilkan pekerjaan yang sama dan berulang-ulang pada network sasaran, hasil dari serangan ini adalah sebuah denial of service yang tidak meninggalkan jejak. Serangan ini dapat diantisipasi dengan cara menolak broadcast yang diarahkan pada router.
TCP-level Flooding (kebanyakan SYN ATTACK) telah digunakan pada bulan februari tahun 2000 untuk menyerang Yahoo!, eBay dll yang menggunakan serangan DDOS(Distributed Denial Of Service). Network yang tidak menggunakan firewall untuk pengecekan paket-paket TCP biasanya bisa diserang dengan cara ini.
Beberapa fungsi penyaringan pada firewall (Firewall Filtering Function) biasanya akan mampu untuk menahan satu serangan flooding dari sebuah alamat IP, tetapi serangan yang dilakukan melalui DDOS akan sulit di cegah karena serangan ini seperti kita ketahui datangnya dari berbagai alamat IP secara berkala. Sebenarnya salah satu cara untuk menghentikan serangan DDOS adalah dengan cara mengembalikan paket ke alamat asalnya atau juga dengan cara mematikan network(biasanya dilakukan oleh system yang sudah terkena serangan sangat parah).
Fragmented Packet Attacks
Data-data internet yang di transmisikan melalui TCP/IP bisa dibagi lagi ke dalam paket-paket yang hanya mengandung paket pertama yang isinya berupa informasi bagian utama( kepala) dari TCP. Beberapa firewall akan mengizinkan untuk memroses bagian dari paket-paket yang tidak mengandung informasi alamat asal pada paket pertamanya, hal ini akan mengakibatkan beberapa type system menjadi crash. Contohnya, server NT akan menjadi crash jika paket-paket yang dipecah(fragmented packet) cukup untuk menulis ulang informasi paket pertama dari suatu protokol.
Paket yang dipecah juga dapat mengakibatkan suasana seperti serangan flooding. Karena paket yang dipecah akan tetap disimpan hingga akhirnya di bentuk kembali ke dalam data yang utuh, server akan menyimpan paket yang dipecah tadi dalam memori kernel. Dan akhirnya server akan menjadi crash jika terlalu banyak paket-paket yang telah dipecah dan disimpan dalam memory tanpa disatukan kembali. Melalui cara enumerasi tentang topographi network sasaran, seorang attacker bisa mempunyai banyak pilihan untuk meng- crash packet baik dengan cara menguji isi firewall, load balancers atau content – based routers. Dengan tidak memakai system pertahanan ini, network sasaran jauh lebih rawan untuk perusakan dan pembobolan.
Karena paket yang dipecah(fragmented packet) tidak dicatat dalam file log sebelum disatukan kembali menjadi data yang utuh, packet yang dipecah ini memberikan jalan bagi hacker untuk masuk ke network tanpa di deteksi. Telah banyak Intrusion Detection System (IDS) dan saringan firewall(firewall filters) yang memperbaiki masalah ini, tapi masih banyak juga system yang masih dapat ditembus dengan cara ini.
E-mail Exploits
Peng-exploitasian e-mail terjadi dalam lima bentuk yaitu: mail floods, manipulasi perintah (command manipulation), serangan tingkat transportasi(transport level attack), memasukkan berbagai macam kode (malicious code inserting) dan social engineering(memanfaatkan sosialisasi secara fisik). Penyerangan email bisa membuat system menjadi crash, membuka dan menulis ulang bahkan mengeksekusi file-file aplikasi atau juga membuat akses ke fungsi fungsi perintah (command function).
Serangan mail flood (flood =air bah) terjadi ketika banyak sekali e-mail yang dikirimkan oleh attacker kepada sasaran yang mengakibatkan transfer agent kewalahan menanganinya, mengakibatkan komunikasi antar program lain menjadi tidak stabil dan dapat membuat system menjadi crash. Melakukan flooding merupakan cara yang sangat kasar namun efektif, maksudnya untuk membuat suatu mail server menjadi down. Salah satu jalan yang menarik dalam melakukan serangan mail-flooding adalah dengan mengexploitasi fungsi auto-responder (auto-responder function) yang terdapat dalam kebanyakan aplikasi email, ketika seorang attacker menemukan auto-responder yang sedang aktif dalam dua system yang berbeda, sang attacker bisa saja mengarahkan yang satu ke yang lainnya, karena kedua-duanya di set untuk merespond secara sacara otomatis untuk setiap pesan, maka kedua-duanya akan terus mengenarate lebih banyak e-mail secara loop(bolak-balik) dan akhirnya kedua-duanya akan kelelahan dan down.
Serangan memanipulasi perintah (command manipulation attack) dapat mengakibatkan sebuah system menjadi crash dengan cara menggulingkan mail transfer agent dengan sebuah buffer overflow yang diakibatkan oleh perintah (fungsi) yang cacat (contoh: EXPN atau VRFY). Perbedaan antara mail flood dan command manipulation: command manipulation meng-exploit kekuasaan milik sendmail yaitu memperbolehkan attacker untuk mengakses system tanpa informasi otorisasi(menjadi network admin tanpa diketahui) dan membuat modifikasi pada penjalanan program lainnya. Mengaktifkan command yang cacat seperti diatas juga dapat mengakibatkan seorang attacker mendapatlan akses untuk memodifikasi file, menulis ulang, dan tentunya saja membuat trojan horses pada mail server.
Penyerangan tingkat transport (transport level attack) dilakukan dengan cara mengexploit protokol perute-an/pemetaan e-mail diseluruh internet: Simple Mail Tranport Protocol (SMTP). Seorang attacker dapat mengakibatkan kondisi kesalahan sementara (temporary error) di target system dengan cara mengoverload lebih banyak data pada SMTP buffer sehingga SMTP buffer tidak bisa menanganinya, kejadian ini dapat mengakibatkan seorang attacker terlempar dari sendmail program dan masuk kedalam shell dengan kekuasaan adminitsrasi bahkan dapat mengambil alih root. Beberapa serangan exploitasi juga sering terjadi pada POP dan IMAP.
Pada saat kerawanan SMTP sulit untuk di exploitasi, attacker mungkin saja berpindah ke serangan tranport level jika ia tidak berhasil menyerang dengan cara command manipulation ataupun mail-flood. Serangan ini lebih digunakan untuk membuat gangguan daripada untuk menjebol suatu system. Seorang attacker biasanya akan menggunakan serangan jenis untuk mem flood Exchange Server dan memotong lalu lintas e-mail (trafic e-mail). Serangan ini juga dapat digunakan untuk membuat reputasi suatu organisasi menjadi buruk dengan mengirimkan spam atau offensive e-mail ke organisasi lainnya dengan sumber dan alamat dari organisasi tersebut.
Mail relaying, proses memalsukan asal/source email dengan cara meroutekannya ke arah mesin yang akan dibohongi, adalah type lain dari serangan transport-level. Teknik ini sangat berguna untuk membuat broadcasting spam secara anonymous. Berbagai macam isi(content) yang sering dikirim lewat e-mail. dengan teknik ini biasanya adalah content-content yang merusak. Beberapa Virus dan Worms akan disertakan dalam e-mail sebagai file attachment yang sah, seperti variant Melissa yang nampak sebagai Ms Word Macro atau loveletter worm yang menginfeksi system dan mengemailkan dirinya sendiri ke users yang berada dalam address booknya outlook. Kebanyakan antivirus scanner akan menangkap attachment seperti ini, tetapi visrus dan worm baru serta variannya masih tetap berbahaya.
Serangan yang terakhir yang dilakukan oleh seorang attacker selain serangan diatas adalah dengan cara melakukan social enginering, kadang sang attacker mengirim e-mail dengan source memakai alamat admin agar users mengirimkan passwordnya untuk mengupgrade system.
DNS and BIND Vulnerabilities
Berita baru-baru ini tentang kerawanan (vulnerabilities) tentang aplikasi Barkeley Internet Name Domain (BIND) dalam berbagai versi mengilustrasikan kerapuhan dari Domain Name System (DNS), yaitu krisis yang diarahkan pada operasi dasar dari Internet (basic internet operation).
Kesalahan pada BIND sebenarnya bukanlah sesuatu yang baru. Semenjak permulaanya, standar BIND merupakan target yang paling favorite untuk diserang oleh komunitas cracker karena beberapa kerawanannya. Empat kerawanan terhadap buffer overflow yang terjadi pada bulan Januari lalu hanya beberapa bagian dari kerawanan untuk diexploitasi oleh para cracker agar mendapat akses terhadap system dan melakukan perintah dengan hak penuh (command execution priviledge).
Kerawanan pada BIND merupakan masalah yang sangat serius karena lebih dari 80 persen DNS yang berada di Jagat Internet dibangun menggunakan BIND. Tanpa adanya DNS dalam lingkungan Internet Modern, mungkin transmisi e-mail akan sulit, navigasi ke situs-situs web terasa rumit dan mungkin tidak ada hal mudah lainnya yang menyangkut internet.
Kerawanan BIND bukan hanya terletak pada DNS. System penerjemah alamat (number-address translator) merupakan subject dari kebanyakan exploit, termasuk untuk melakukan penyerangan di tingkat informasi, penyerangan Denial Of Service, pengambil alihan kekuasaan dengan hijacking. Penyerangan di tingkat Informasi bertujuan untuk membuat server menjawab sesuatu yang lain dari jawaban yang benar. Salah satu cara untuk melakukan serangan jenis ini adalah melalui cache poisoning, yang mana akan mengelabui remote name server agar menyimpan jawaban dari third-party domain dengan cara menyediakan berbagai macam informasi kepada domain server yang mempunyai autorisasi. Semua pengimplementasian serangan terhadap DNS akan mempunyai kemungkinan besar untuk berhasil dilakukan jika jawaban dari suatu pertanyaan yang spesisfik bisa dibohongi (spoof).
DOS atau membuat Server tidak dapat beroperasi, bisa dilakukan dengan cara membuat DNS menyerang dirinya sendiri atau juga dengan cara mengirimkan traffic-flooding yang berlebihan dari luar, contohnya menggunakan “Smurf” ICMP flood. Jika suatu organisasi atau perusahaan memasang authoritathive name server dalam satu segment yang terletak dibelakang satu link atau dibelakang satu physical area, maka hal ini akan menyebabkan suatu kemungkinan untuk dilakukannya serangan Denial Of Service.Cracker akan mencoba untuk menyerang system melalui DNS dengan cara buffer overflow, yaitu salah
satu exploit yang sangan berpotensi pada kerawanan BIND. Gangguan exploit terjadi karena adanya kelemahan dalam pengkodean/pemrograman BIND yang mengizinkan seorang attacker untuk memanfaatkan code-code yang dapat dieksekusi untuk masuk kedalam system. Beberapa system operasi telah menyediakan patch untuk stack agar tidak dapat dieksekusi, sebagaimana juga yang dilakukan compiler (menyediakan patch) yang melindungi stack dari overflow. Mekanisme perlindungan ini stidaknya membuat cracker akan sulit menggunakan exploit.
Telah jelas bahwa mengupdate system secara berkala dan menggunakan patch adalah salah satu yang harus dilakukan untuk membangun security yang efektif, jika vendor dari DNS anda tidak menyediakan patch secara berkala, anda lebih baik mengganti software DNS anda yang menyediakan patch secara berkala, tentunya untuk menjaga kemanan system. Pada system Unix , BIND harus dijalankan sebagai root untuk mengatur port yang lebih rendah (kodekode mesin). Jika software DNS dapat dibodohi untuk menjalankan code-code berbahaya, atau membuka file-file milik root, user local mungkin saja bisa menaikan kekuasaannya sendiri didalam mesin. Organisasi atau perusahaan yang mengubah authoritative server juga harus waspada bahwa mengganti server mereka dalam waktu yang bersamaan akan mengakibatkan domain mereka di hijack melalui cache poisoning. Mengubah server seharusnya dilakukan sebagai proses transisi. Untuk mencegah domain hijacking sebaiknya network admin terlebih dahulu menambahkn server barunya kedalam network infrastucture sebelum mengganti server yang lama.
Password Attacks
Password merupakan sesuatu yang umum jika kita bicara tentang kemanan. Kadang seorang user tidak perduli dengan nomor pin yang mereka miliki, seperti bertransaksi online di warnet, bahkan bertransaksi online dirumah pun sangat berbahaya jika tidak dilengkapi dengan software security seperti SSL dan PGP. Password adalah salah satu prosedur kemanan yang sangat sulit untuk diserang, seorang attacker mungkin saja mempunyai banyak tools (secara teknik maupun dalam kehidupan sosial) hanya untuk membuka sesuatu yang dilindungi oleh password. Ketika seorang attacker berhasil mendapatkan password yang dimiliki oleh seorang user, maka ia akan mempunyai kekuasaan yang sama dengan user tersebut. Melatih karyawan/user agar tetap waspada dalam menjaga passwordnya dari social engineering setidaknya dapat meminimalisir risiko, selain berjaga-jaga dari praktek social enginering organisasi pun harus mewaspadai hal ini dengan cara teknikal. Kebnayakan seranagn yang dilakukan terhadap password adalah menebak (guessing), brute force, cracking dan sniffing. Penebakan(guessing) password bisa dilakukan dengan cara memasukan password satu persatu secara manual ataupun dengan bantuin script yang telah diprogram. Kebanyakan user menggunakan hal-hal yang umum untuk password mereka diantaranya tanggal lahir, dan biasanya user tidak menghawatirkan tentang aturan yang berlaku pada perusahaan untuk menggunakan kombinasi alphanumeric dan minimal 7 karakter. Jika saja user memakai tanggal lahirnya sebagai password maka hal penyerangan akan sangat mudah dilakukan, karena cracker tidak membutuhkan waktu yang lama hanya untuk menjebol 6 digit angka tanggal lahir. Beberapa user atau bahkan administrator dapat membuat pekerjaan cracker menjadi mudah andai saja mereka lupa untuk merubah password default dari sebuah software.
Sebenarnya, password guessing merupakan sesuatu yang sangat tidak efektif, dan dapat menghabiskan waktu. Network admin bisa dengan mudah mendetect serangan jika seorang attacker mencoba login dengan menebak password berkali-kali. Brute-force merupakan serangan yang menggunakan logika yang sama dengan password guessing tetapi serangan brute-force lebih cepat dan lebih powerfull. Dalam tipe serangan ini seorang attacker menggunakan script (biasanya program cracking gratis) yang akan mencoba password-password umum(biasanya terdapat dalam dictionary). Tujuan dari serangan jenis ini adalah untuk mempercepat penemuan password sebelum network admin menyadari adanya serangan. Walaupun serangan Brute-force lebih efisien daripada password guessing, kedua teknik tersebut pada dasarnya sama. Attacker umumnya lebih sulit untuk berhasil dengan kedua metoda tersebut. Lebih jauh lagi, kedua teknik tersebut sangat mudah di lawan dengan memanfaatkan features blacklisting, yang akan mengunci sebuah account user jika seseorang(attacker) berkali-kali memasukkan password secara tidak tepat. Contohnya, default blacklist dalam system unix adalah tiga kali (kesempatan memasukkan password).
Kelemahan dari perlindungan blacklist adalah bahwa feature blacklist ini dapat igunkan untuk menyerang system oleh attacker. Sebagai contoh, jika seorang attacker dapat mengidentifikasi siapa login name untuk network admin, sang attacker bisa saja menngunakan login name itu dan memasukkan password yang salah berulangkali dan akhirnya mengunci account admin ☺. Ketika sang admin sedang berusaha untuk mendapatkan aksesnya kembali, seorang attacker masih bisa untuk berhubungan dengan system. Password cracking adalah metoda untuk melawan perlindungan password yang dienkripsi yang berada di dalam system. Dengan anggapan bahwa atacker telah masuk kedalam system, ia bisa saja mengubah kekuasaannya didalam system dengan cara meng crack password file menggunakan metode brute-forcedictionary attack (mencocokan kata-kata yang berada dalam kamus dengan kata-kata yang dienkripsi dalam file password). Keberhasilan menggunakan cara ini bergantung pada kecepatan prosesor dan
program yang dimiliki oleh attacker. Cara yang terbaik untuk menghindari serangan jenis ini adalah dengan memonitor kewenangan akses pada file.
Dengan cara mengintip lalulintas pada port telnet(23) ataupun HTTPD (80), seorang attacker dapat mendapatkan password yang digunakan untuk internet dan koneksi secara remote melalui proses yang dinamakan password snifing. Cara inilah yang paling mudah dilakukan karena kedua koneksi tersebut tidak menggunakan enkripsi, kecuali koneksi yang menggunakan SSL (secure socket layer) pada HTTPD(biasanya ada tanda gembok terkunci dibawah browser, yang menandakan transaksi aman) atau juga menggunakan SSH (Secure SHell) untuk koneksi ke mesin lain secara remote.
9. Proxy Server Attacks
Salah satu fungsi Proxy server adalah untuk mempercepat waktu response dengan cara menyatukan proses dari beberapa host dalam suatu trusted network. Dalam kebanyakan kasus, tiap host mempunyai kekuasan untuk membaca dan menulis (read/write) yang berarti apa yang bisa saya lakukan dalam system saya akan bisa juga saya lakukan dalam system anda dan sebaliknya. Jika firewal yang berada dalam trusted network tidak dikonfigurasikan secara optimal, khususnya untuk memblok akses dari luar, apalagi jika autentikasi dan enkripsi tidak digunakan, seorang attacker bias menyerang proxy server dan mendapatkan akses yang sama dengan anggota trusted network lainnya. Jika attaker sudah masuk ke sistem ia tentunya bisa melakukan apa saja dan ia bisa melakukan DDOS(distributed denial of service) secara anoymous untuk menyerang network lain. Router yang tidak dikonfigurasikan secara optimal juga akan berfungsi sebagai proxy server dan akan mengakibatkan kerawanan yang sama dengan proxy server.
10. Remote Command Processing Attacks
Trusted Relationship antara dua atau lebih host menyediakan fasilitas pertukaran informasi dan resource sharing. Sama halnya dengan proxy server, trusted relationship memberikan kepada semua anggota network kekuasaan akses yang sama di satu dan lain system (dalam network). Attacker akan menyerang server yang merupakan anggota dari trusted system. Sama seperti kerawanan pada proxy server, ketika akses diterima, seorang attacker akan mempunyai kemampuan mengeksekusi perintah dan mengkases data yang tersedia bagi user lainnya.
11. Remote File System Attack
Protocol-protokol untuk tranportasi data –tulang punggung dari internet— adalah tingkat TCP (TCPLevel) yang mempunyai kemampuan dengan mekanisme untuk baca/tulis (read/write) Antara network dan host. Attacker bisa dengan mudah mendapatkan jejak informasi dari mekanisme ini untuk mendapatkan akses ke direktori file. Tergantung pada OS (operating system) yang digunakan, attacker bisa meng extrack informasi tentang network, sharing privileges, nama dan lokasi dari user dan groups, dan spesifikasi dari aplikasi atau banner (nama dan versi software). System yang dikonfigurasi atau diamankan secara minimal akan dengan mudah membeberkan informasi ini bahkan melalui firewall sekalipun. Pada system UNIX, informasi ini dibawa oleh NFS (Network File System) di port 2049. system Windows menyediakan data ini pada SMB (server messaging block) dan Netbios pada port 135 - 139(NT) dan port 445 pada win2k.Network administrator bisa meminimalisasi resiko yang akan terjadi dengan menggunakan Protokolprotokol
tersebut dengan memberikan sedikit peraturan. Network dengan system windows, harusnya memblok akses ke port 139 dan 445 dari luar network, jika dimungkinkan. Dalam system unix port 2049 seharusnya di blok, sharing file dibatasi dan permintaan file melalui showmount(perintah dalam unix) seharusnya di catat dalam log.
12. Selective Program Insertions
Selective Program Insertions adalah serangan yang dilakukan ketika attacker menaruh program-program penghancur, seperti virus, worm dan trojan (mungkin istilah ini sudah anda kenal dengan baik ☺) pada system sasaran. Program-program penghancur ini sering juga disebut malware. Program-program ini mempunyai kemampuan untuk merusak system, pemusnahan file, pencurian password sampai dengan membuka backdoor. Biasanya antivirus yang dijual dipasaran akan dapat mendeteksi dan membersihkan program-program seperti ini, tetapi jika ada virus baru (anggap saja variant melissa) virus scanner belum tentu dapat menghadapi script-script baru. Beberapa network administrator melakukan pertahan terhadap malware dengan teknologi alternatif seperti behaviour blockers, yang memberhentikan kode-kode yang dicurigai berdasarkan contoh kelakuan malware, bukan berdasarkan signature. Beberapa aplikasi lainnya akan mengkarantina virus dan code-code yang dicurigai didalam daerah yang dilindungi, biasanya disebut sandboxes.
13. Port Scanning
Melalui port scanning seorang attacker bisa melihat fungsi dan cara bertahan sebuah system dari berbagai macam port. Seorang atacker bisa mendapatkan akses kedalam sistem melalui port yang tidak dilindungi. Sebaia contoh, scaning bisa digunakan untuk menentukan dimana default SNMP string di buka untuk publik, yang artinya informasi bisa di extract untuk digunakan dalam remote command attack.
14. TCP/IP Sequence Stealing, Passive Port Listening and Packet
Interception
TCP/IP Sequence Stealing, Passive Port Listening dan Packet Interception berjalan untuk mengumpulkan informasi yang sensitif untuk mengkases network. Tidak seperti serangan aktif maupun brute-force, serangan yang menggunakan metoda ini mempunyai lebih banyak kualitas stealth-like. TCP/IP Sequence Stealing adalah pemetaan dari urutan nomor-nomor (angka), yang bisa membuat packet milik attacker terlihat legal. Ketika suatu system meminta sesi terhadap mesin lain, kedua system tersebut saling bertukar nomor-nomor sinkronisasi TCP. Jika tidak dilakukan secara acak, Attacker bisa mengenali algoritma yang digunakan untuk meng –generate nomor-nomor ini. Urutan nomor yang telah dicuri bias digunakan attacker untuk menyamar menjadi salah satu dari system tadi, dan akhirnya memperbolehkannya untuk melewati firewall. Hal ini sebenarnya efektif jika digunakan bersama IP Spoofing.
Melalui passive port listening, seorang attacker dapat memonitor dan mencatat (log) semua pesan dan file yang dikirim ke semua port yang dapat diakses pada target system untuk menemukan titik kerawanan. Packet Interception adalah bagian (tepatnya pelapis) dari active listener program yang berada pada port di system sasaran yang berfungsi untuk menerima ataupun mengembalikan semua tipe pesan (data) spesifik yang dikirim. Pesan tersebut bisa dikembalikan ke unauthorized system, dibaca dan akhir nya dikembalikan lagi baik tanpa perubahan atau juga dengan perubahan kepada attacker, atau bahkan tidak dikembalikan. Dalam beberapa versi atau juga menurut konfigurasi dari user SSHD(secured shell daemon), otentikasi bisa dilakukan dengan cara menggunakan public key (milik mesin tentunya). Jika seorang attacker mempelajari public key yang digunakan, ia bisa menciptakan atau memasukan paket-paket palsu. System sasaran akan menganggap pengirim paket palsu tersebut mempunyai hak akses.
15. HTTPD Attacks
Kerawanan yang terdapat dalam HTTPD ataupun webserver ada lima macam: buffer overflows, httpd bypasses, cross scripting, web code vulnerabilities, dan URL floods. HTTPD Buffer Overflow bisa terjadi karena attacker menambahkan errors pada port yang digunakan untuk web traffic dengan cara memasukan banyak carackter dan string untuk menemukan tempat overflow yang sesuai. Ketika tempat untuk overflow ditemukan, seorang attacker akan memasukkan string yang akan menjadi perintah yang dapat dieksekusi. Bufer-overflow dapat memberikan attacker akses ke command prompt.
Beberapa feature dari HTTPD bisa digunakan untuk meciptakan HTTPD byapass, memberi akses ke server menggunakan fungsi logging. Dengan cara ini, sebuah halaman web bisa diakses dan diganti tanpa dicatat oleh web server. Cara ini sering digunakan oleh para cracker, hacktivis dan cyber vandals untuk mendeface website. Sedangkan kerawanan pada script-script web bisa terjadi pada semua bahasa pemrograman web dan
semua ekstensi aplikasi. Termasuk VB, Visual C++, ASP, TCL, Perl, PHP, XML, CGI dan Coldfusion. Pada dasarnya, attacker akan mengexploitasi kelemahan dari sebuah aplikasi, seperti CGI script yang tidak memeriksa input atau kerawanan pada IIS RDS pada showcode.asp yang mengizinkan menjalankan perintah secara remote (remote command priviledges). Melalui cross scripting dan cross-site scripting seorang attacker bisa mengexploitasi pertukaran cookies antara browser dan webserver. Fasilitas ini dapat mengaktifkan script untuk merubah tampilan web dll. Script ini bisa menjalankan malware, membaca infomasi penting dan meng expose data sensitive seperti nomor credit card dan password. Pada akhirnya attacker dapat menjalankan denial of service dengan URL flood, yang dilakukan dengan cara mengulang dan terus mengulang permintaan terhadap port 80 httpd yang melalui batas TTL (time to live). Beberapa user ataupun manager mungkin benci mendengar serangan-serangan tersebut. Tapi pada kenyataanya memang tidak ada yang benar-benar fix untuk mengamankan network ataupun website. Keamanan adalah suatu proses, bukan produk. Jika anda memasang firewall, IDSes(instrusion detection system), routers dan honeypots (system untuk jebakan) mungkin dapat menyediakan lapisan-lapisan untuk bertahan, tetapi sekali lagi peralatan paling canggih di dunia tidak akan menolong suatu organisasi sampai organisasi tersebut mempunyai proses untuk mengupgrade system, memakai patch, mengecek security pada system sendiri dan metode lain. Telah banyak perusahaan yang memakai IDSes tetapi tidak memonitor file log, mereka menginstall firewall, tetapi tidak mengupgradenya. Jalan terbaik untuk melindungi website maupun network dari serangan adalah mendekatkan keamanan sebagaimana tantangan yang sedang terjadi terhadap keamanan
itu sendiri, terus berusaha, selalu ingat basicnya dan jangan lupa untuk berdoa...Smile
Kamu Ingin Belajar Hacking ? Apakah kamu bisa memasuki computer orang
(membajak ) dari komputermu sehingga kamu bisa mengambil data, menyadap merusak
system computer? Apakah kamu bisaϑpassword, bahkan mengendalikan computer orang
lewat komputermu, sampai pemilik computer program-program komputernyaϑmengira
komputernya kesurupan jin ketika aktif sendiri, CD room keluar-masuk dll ? Hehe
(panggilan jawabannya bisa coy….! Ini sangat cocok untuk kalangan NewBieΛdari
gerombolan hacker untuk orang yang baru mengenal Computer Network). Oke coy…!
Kalau kamu ingin memasuki computer orang, kamu bisa menggunakan 3D Traceroute
dengan menscan port untuk masuk kepada computer Korban. Atau pada computer yang
menggunakan LAN kamu bisa pakai program Internet Maniac v1.0. Oke supaya kamu ga
kebingungan….santai…dan baca di bawah ini : Cara masuk di komputer lain lewat DOS
(Windows XP / 2000) Kamu ingin masuk dikomputer teman kamu dalam sebuah LAN ?
bisa melihat seluruh isi harddisk teman anda, membuat directory, membuat file,
mendelete file atau apa aja ? itu mudah, semua caranya ada disini. Pertama-tama anda
harus tahu 2 program penting lalu downloadlah yaitu internet Maniac (Internet
Maniac.exe) ... Download Interenet Maniac Berfungsi untuk mengetahui ip addreas client
melalui computer name / hostname KaHT (KaHt.exe) ... Downloadlah program hacker
KaHT Berfungsi sebagai program untuk menerobos ke computer server atau client Ingat
hanya dengan 2 program diatas maka anda bersiap-siaplah menguasai warnet / kampus /
kantor dan sebagainya, lho bagaimana bisa ? hehe Pertama kali kamu periksa dahulu
jaringan anda dengan melihat para hostname dengan 2 cara. Ingat hanya dengan 2
program diatas maka anda bersiap-siaplah menguasai warnet / kampus / kantor dan
sebagainya, lho bagaimana bisa ? hehe…. Setelah 2 program diatas di download maka
ekstractlah dahulu program tersebut, entah pake WINZIP atau pake apa. Kalo udah di
extract lalu pertama kali kamu periksa dahulu jaringan kamu dengan melihat para
hostname dengan 2 cara. Untuk Windows XP Cara Pertama Masuk ke Start Lalu Search,
lalu pilih computers or people lalu pilih A computer on the Network lalu langsung klik
search maka akan segera muncul computer-komputer yang terkoneksi dalam
jaringan.Untuk Windows 95/98/Me/2000 (kalau anda menemukan open port 135 di OS
ini). Cara Pertama Masuk ke Start Lalu Search Lalu For Files or Folders lalu pada menu
Search for other item pilihlah computers, lalu akan muncul Search for computer, maka
langsung klik Search Now maka nama-nama computer akan muncul (Alternatif cara yang
cepat dapat mengklik My Network Place / Network Neighboure saja). Setelah kamu
dapetin sasaran computer yang mau di masukin / diremote maka kamu langsung aja
jalankan program Internet Maniac. Masuklah ke Host Lookup lalu ketikkan nama
computer / hostname lalu klik resolve, disini anda akan mendapat alamat ip computer
tersebut. Dengan nomor ip ini maka anda sudah mengetahui sasaran computer yang akan
di masuki. Setelah itu selesai maka kita tinggalkan program Internet Maniac, kita akan
berlanjut dengan program KaHT, program ini akan didetect sebagai Trojan oleh antivirus,
tapi abaikan saja, jangan di hapus / di karantina kalau terdetect, kalau perlu del aja
antivirusnya, satu lagi, program KaHT bekerja dalam MS-DOS Mode jadi disini
kemampuan anda menggunakan DOS sangat penting, Tanpa kemampuan DOS maka
anda tidak akan bisa banyak berbuat. Cara masuk DOS Mode Untuk Windows XP :
Masuklah ke Start, Programs, Accessories lalu MS-DOS Prompt Setelah berhasil masuk
DOS maka masuklah di directory program KaHT, masa seh bisa lupa tadi program
diextract dimana, hehe, (Misal tadi di extract di C:\KaH) maka ketikkan "CD\KaHT" dan
seterusnya. Jika sudah, ini saatnya? Ketikkan "KaHT sebelum_no_ip_komputer_sasaran
no_ip_komputer_sasaran. kalau bingung bisa begini : "KaHT Ip1 ip2" ip1 : ip awal yang
discan ip2 : ip terahkir yang discan. Misalnya tadi ip-nya 192.168.0.1 setelah di detect
pakek Internet Maniac tadi itu lho. Maka ketikkan saja "KaHT 192.168.0.0 192.168.0.1"
lalu enter aja Nah disini nanti program akan bekerja otomatis. Setelah selesai menscan
jika nanti port 135 ternyata dalam keadaan open maka anda akan otomatis di computer
tujuan / sasaran, untuk lebih persisnya anda akan berada di "c:\windows\system" milik
komputer tujuan / sasaran setelah pen-scan-an selesai. Kamu bisa bebas di computer
sasaran, mau edit atau di delete pun bisa, hehe. Nah kalo udah begini kita bisa berkreasi :
Pingin biaya warnet kita lebih murah ? gampang masuk aja di billing server, ketik Time,
ganti aja waktunya, tapi jangan banyak-banyak apalagi minus nanti ketahuan sama
operator warnetnya, hehe. Memata-matai anak yang sedang chatting pakek MiRC di satu
warnet / kampus / kantor / lainnya, cari program MiRC yang digunakan dalam computer
tersebut, biasanya seh di C:\Program Files\MiRC, buka file MiRC.INI, lalu Log IRC di
On kan saja dan kalo mau lihat isi chattingan teman kita itu cukup lewat "/logs"
maksudnya kalau tadi di C:\program Files\MiRC program MiRCnya maka cukup masuk
aja di C:\Program Files\MiRC\Logs nanti disitu ada file-file log hasil chattingan dia
walaupun dia sedang online tetep aja terekam, hehe, kalo mau mastiin dia makek nick
apa, gampang banget bisa jalanin aja MiRCnya atau periksa di MiRC.INI, gampangkan ?
Apalagi nih, Bikin computer itu rusak, lebih baik jangan, tapi sebenere bisa lho, delete aja
file-file systemnya, hehe. Diatas cuman kreasi dikit aja, loe bisa aja memanfaatkannya
jauh lebih bermanfaat dari pada diatas Tujuan dari tutorial ini untuk anda yang sering
menggunakan komputer dengan Windows 2000 dan XP dijaringan agar lebih waspada
terhadap berbagai tindakan usil dari pihak-pihak yang tidak bertanggung jawab..
Membuat Akses Administrator Windows Untuk Kita Lewat Komputer Lain Kita ingin
membuat administrator Windows XP/2000 di komputer lain melalui LAN ? sangat
mudah, caranya masuklah ke komputer tujuan dengan program kaht yang sudah diajarkan
diatas, lalu kita akan mencoba beberapa trik. Melihat akses guest dan administrator di
Windows Ketik : net user Melihat aktif tidaknya guest di Windows Ketik : net user guest
Membuat akses guest menjadi Administrator dengan perintah : Ketik : net localgroup
Administrators Guest /add Membuat akses adminstrator sendiri : 1. Ketik : net user /add
2. Ketik : net localgroup Administrators /add Menghapus akses administrator Ketik : net
localgroup Users /delete Mengendalikan Computer Orang Lewat Computer Kamu Untuk
ini kamu memerlukan program yang namanya lumayan serem "NetBus". Kamu bisa
pakai NetBus versi 1.6 atau 1.70 dengan port 12345. Atau NetBus 2.0 Pro dengan port
20024 atau 20043. Bagaiman caranya ? Kamu tidak akan bisa sebelum mengirimkan
Patch.exe ke computer korban. Kalau lewan Chat mIRC kamu bisa mengirimkan alamat
Patch.exe ke partner chat kamu yang memungkinkan dia mengklik patch.exe tersebut.
Atau yang lebih mudah untuk uji coba, kamu bisa memasangkan Patch.exe itu langsung,
misal di warnet. Kamu copy patch.exe itu yang sudah kamu simpan di flashdisk, misak di
C:\ , terus kamu klik patch.exe itu (install / usahakan kamu sembunyikan letak patch.exe
itu agar sulit di temukan). Nah sekarang kamu catat IP Address / Hostname computer
yang sudah dikasih patch.exe itu, terus kamu pulang ke kamarmu, lalu nyalakan
komputermu dan aktifkan netbus. Kamu isi tu IP computer korban di netbus dan pilih
tombol connect. Maka NetBus akan tersambung dengan computer korban secara
otomatis. Wah… disini kamu akan melihat betapa jahatnya NetBus, kamu bisa
mengeluarkan/memasukkan CD Room computer korban, kamu bisa mengendalikan
keyboard, mouse, dan program-program yang ada di computer korban, kamu pun bisa
mematikan / merestart computer korban. Yang paling oke kamu juga bisa menyadap
password, mengambil data, atau memantau orang-orang yang menggunakan computer
tersebut. Hehe…semua yang menggunakan computer itu pasti Catatan: *Segala
kesalahan error /mengira komputernya kesurupan jin. Hehehe… … kerusakan pada
komputerϑ dan semacamnya adalah tanggung jawab anda ! *Semua yang anda pelajari
dan anda lakukan adalah sepenuhnya tanggung jawab anda tanpa kecuali. "...TETAP
SEMANGAT..."
Dalam suatu kesempatan, saya pernah melihat seorang auditor keamanan jaringan melalukan penetration test (pen-test) terhadap suatu sistem IT. Karena penasaran saya melihat sedikit2 cara penetration test yang dilakukan. Waktu itu saya belum banyak tahu tools apa aja yang digunakan, yang saya tau dia menggunakan tcpdump untuk menganalisis paket apa aja yang lewat, trus untuk men-scan beberapa host menggunakan Nessus. Ada salah satu aplikasi yang digunakan berbasis web yang terdapat kumpulan beberapa exploit. Waktu itu saya belum tahu aplikasi apa itu, yang saya ingat aplikasi itu menggunakan alamat http://127.0.0.1:55555, nah berbekal port 55555 saya mencari di google, dan ternyata itu adalah Metasploit Framework!.
Peristiwa itu menginspirasikan saya untuk mengenang masa-masa lalu ketika masih seneng2nya ngoprek dan belum ‘tercemar’ oleh DotA. Akhirnya sekarang saya ingin belajar ngoprek lagi, tp lebih fokus ke exploitnya saja. Tulisannya ini akan saya buat menjadi tiga bagian. Bagian pertama mengenai bagaimana salah satu cara umum yang dilakukan untuk menge-hack suatu system. Disini saya lebih menitikberatkan untuk hacking OS Windows XP, karena OS ini paling banyak dipakai orang. Bagian kedua lebih banyak ke teori mengenai exploit. Tapi karena mungkin akan sangat sulit dipahami (saya sendiri msh blm bisa membuat exploit sendiri), saya hanya menuliskan hasil terjemahan yang membahas apa itu dan cara kerja exploit. Sedangkan bagian terakhir merupakan praktek bagaimana mengelakukan penetration test menggunakan metasploit di Windows XP.
Bagian 1
*ini merupakan artikel lama mengenai salah satu cara umum yang dilakukan untuk hacking. (artikel ini jg di mirror oleh Negative a.k.a Jim Geovedi di sini). Langkah dibawah ini merupakan cara ’standar’, hacking sebenarnya tidak harus selalu sesuai dengan ’standar’ ini.
Hacking buat pemula
- by aCh
Artikel ini ditujukan bagi pemula, dan disusun oleh pemula. Ditulis untuk pengetahuan semata. Untuk temen2 yg udah ahli, sok aja dilewat, tapi dibaca juga gpp….
Apa sebenarnya hacking itu? klo menurut pengertian gue, hacking adalah ngoprek. Yup, hacking adalah ngoprek, mempelajari sesuatu dengan keingintahuan (curiosity) yg tinggi, ngutak atik sesuatu, ‘ngudek-ngudek’ sampai ke ‘jeroannya’. Sesuatunya apa dong? ya terserah… bisa komputer, mobil, motor, mesin. Tapi masalahnya ada ngga ya hacker mobil, hacker motor, atau hacker pesawat terbang?? hehe… Walaupun saat ini hacking identik dengan ‘bobol-membobol’, tapi gue kurang setuju klo cuman bobol server orang doang!. Ada yang bilang ‘Hacking is Art’, trus dimana letak seninya dong? Mau tau pengertian hacking sebenarnya, coba baca artikel sebelumnya (How to Become A Hacker). Di situ dijelasin bahwa hacker berkaitan dengan kemahiran teknis serta kegemaran menyelesaikan masalah dan mengatasi keterbatasan. Contoh hacker pada saat ini yang sering-sering disebut adalah Linus Torvald (tau ngga? itu lho yang menciptakan Linux). Apa dia tukang bobol? belum tentu kan….
Pada artikel ini, gue pengen membagi pengalaman mengenai Hacking, walaupun sampai saat ini gue belum pernah nge-Hack ke server orang. Salah satu cara untuk mencoba simulasi Hack yaitu H3cky0uRs3lf! Buat komputer kita sebagai server (sekaligus belajar konfigurasi server) trus install program yg dibutuhkan. Misalnya klo mo Web Hacking, coba install Apache atau IIS. Atau kita sesuaikan dengan exploit yang udah kita dapet. Tapi lebih baik install Linux atau FreeBSD dulu di komputer pribadi, trus konfigurasi sebagai server, lalu simulasi Hack, setelah itu baru Hack Betulan… Apalagi klo di kost ada jaringan.
Pro dan Kontra Hacking
Pro
Kontra
Etika Hacking
Semua informasi adalah free
Jika semua informasi adalah free, maka tidak ada ladi privacy
Aspek Security
Intrusion adalah ilustrasi kelemahan sistem
Tidak perlu menjadi pencuri untuk menunjukkan pintu yang tidak terkunci
Idle Machines
Hacking hanya pada idle machines
idle machines milik siapa ?
science education
hanya membobol tapi tidak merusak
“hacker wannabe” berpotensi sangat besar untuk merusak
Okeh, sekarang waktunya melakukan aksi…
1. Fase Persiapan
~ Mengumpulkan informasi sebanyak-banyaknya
- Secara Aktif : - portscanning
- network mapping
- OS Detection
- application fingerprinting
Semua itu bisa dilakukan menggunakan toolz tambahan seperti nmap atau netcat
- Secara Pasif : - mailing-list (jasakom, newbie_hacker, hackelink, dsb)
- via internet registries (informasi domain, IP Addres)
- Website yang menjadi terget
2. Fase Eksekusi
~ Setelah mendapatkan informasi, biasanya akan didapatkan informasi mengenai OS yg digunakan, serta port yang terbuka dengan daemon yg sedang berjalan. Selanjutnya mencari informasi mengenai vulnerability holes (celah kelemahan suatu program) dan dimanfaatkan menggunakan exploit (packetstromsecurity.org, milw0rm, milis bugtraq, atau mencari lewat #IRC).
~ Mengekspolitasi Vulnerability Holes
- compile eksploit -> local host ->
$gcc -o exploit exploit.c
$./exploit
# hostname (# tanda mendapatkan akses root)
remote host -> $gcc -o exploit exploit.c
$./exploit -t www.target.com
# (klo beruntung mendapatkan akes root)
~ Brute Force
- Secara berulang melakukan percobaan otentifikasi.
- Menebak username dan password.
- Cracking password file
~ Social Engineering
- Memperdayai user untuk memeberi tahu Username dan password
- Intinya ngibulin user….
3. Fase Setelah Eksekusi
~ Menginstall backdoor, trojans, dan rootkit
~ Menghapus jejak dengan memodifikasi file log agar tidak dicurigai admin
~ Menyalin /etc/passwd atau /etc/shadow/passwd
Nah, intinya seh cara masuk ke server seseorang seperti fase diatas. Mencari informasi, temukan exploit, dan tinggalkan backdoor. Cuma masalahnya hacking bukanlah segampang cara-cara diatas. Itu hanyalah teori, banyak hal yang harus diperhatikan jika ingin mempraketekkan hacking ke server seseorang. Jangan sekali-kali mencoba2 hacking ke server orang tanpa memperhatikan anonimitas (apalagi klo connectnya lewat komputer pribadi tanpa menggunakan proxy). Ntar klo ketahuan bisa repot. Saran gue, cobalah pada mesin localhost dulu (komuter pribadi), klo terhubung ke LAN lebih bagus. Sediakan server yang khusus buat dioprek. Kalaupun pun ga terhubung ke jaringan, kita masih bisa menggunakan Virtual Machine menggunakan VMWare seperti yang nanti akan dibahas pada bagian 3!
Bagi seseorang yang bergelut di dunia security bahasa Assembly adalah bahasa yang wajib dikuasai. Karena bahasa ini adalah bahasa tingkat rendah, dekat dengan bahasa mesin (biner), maka mempelajari bahasa ini akan sangat menguntungkan. Dengan mempelajari bahasa assembly, sedikit banyak secara otomatis kita akan memahami cara komputer bekerja lebih dalam lagi.
Artikel ini juga sebagai pembuka sebelum saya membahas mengenai shellcode, buffer overflow dan teknik exploitasi lain yang membutuhkan pemahaman mengenai assembly dan sistem operasi. Bila anda ingin menjadi hacker yang baik, anda wajib menguasai bahasa ini.
Bahasa Mesin, Assembly dan C
Pada dasarnya komputer adalah makhluk digital yang hanya mengerti digit 1 dan digit 0 (binary). Komputer hanya mau menerima data dalam bentuk binary dan juga hanya bisa mengerti perintah dalam bentuk binary. Perintah dalam bentuk binary ini disebut dengan bahasa mesin.
Secara umum program bisa dilihat sebagai urutan langkah/perintah/instruksi untuk menyelesaikan sesuatu. Programmer bisa langsung membuat program dengan menuliskan perintah dalam bentuk 1 dan 0 (bahasa mesin), atau menggunakan bahasa tingkat tinggi yang lebih manusiawi seperti C, Visual Basic atau Java.
Hanya dua simbol yang dimengerti komputer, yaitu 1 dan 0
Perhatikan contoh sederhana ini: programmer ingin menyimpan nilai register EAX ke dalam stack. Dalam bahasa mesin programmer harus menuliskan 01010000. Sedangkan dalam bahasa assembly programmer cukup menulis PUSH EAX. Manakah yang lebih manusiawi? Tentu menggunakan assembly lebih manusiawi. Sangat sulit bagi manusia bila harus selalu menggunakan 1 dan 0 setiap memberi perintah.
codeinbinary
Semakin tinggi bahasanya, maka semakin manusiawi cara memberi perintahnya. Contohnya bila programmer ingin menampilkan suatu teks di layar monitor, dalam bahasa C programmer cukup menuliskan printf(“Hello World”), mudah dan singkat. Namun dalam bahasa yang lebih rendah seperti assembly, dibutuhkan sekitar 5 langkah untuk menyelesaikan tugas yang sama.
Semua program dalam bahasa apapun dibuatnya, pada akhirnya ketika akan dieksekusi akan diterjemahkan dalam bahasa mesin, karena itulah satu-satunya bahasa yang dimengerti prosesor.
Bahasa Assembly dan Processor
Karena bahasa assembly adalah mnemonic (singkatan) untuk instruksi dalam bahasa mesin. Maka perintah-perintah dalam bahasa assembly terkait erat dengan prosesornya. Setiap prosesor memiliki instruction set masing-masing,sehingga bahasa assembly untuk prosesor Intel akan berbeda dengan assembly untuk prosesor lainnya. Namun karena intel menguasai pangsa pasar prosesor maka hampir semua produsen prosesor membuat instruksi set yang kompatibel dengan intel.
Bahasa assembly adalah mnemonic dari instruksi bahasa mesin (berbentuk binary) yang disebut opcode
Dokumentasi lengkap mengenai membuat program dalam prosesor intel, termasuk daftar instruction setnya bisa diperoleh di website resmi intel, di intel developer manuals. Dalam artikel ini saya hanya menjelaskan beberapa instruksi dasar yang paling banyak dipakai, selebihnya bisa dilihat di manual yang ada di website intel.
Assembly AT&T dan NASM
Ada dua sintaks bahasa assembly, yaitu dalam format AT&T dan NASM. Sintaks AT&T banyak dipakai dalam lingkungan GNU seperti GNU Assembler, dan menjadi format default GNU Debugger (GDB). Sedangkan format NASM dipakai oleh netwide assembler dan banyak dipakai di lingkungan windows.
Perlu dicatat bahwa perbedaan NASM dan AT&T ini hanya masalah sintaks saja, keduanya menghasilkan bahasa mesin yang sama persis
Beberapa perbedaan antara format AT&T dan NASM adalah:
* Baris komentar diawali dengan “;” semicolon untuk NASM. AT&T mengawali komentar dengan # (hash)
* Dalam format AT&T, setiap register diawali dengan %. NASM tidak menggunakan %.
* Dalam format AT&T, setiap nilai literal (konstanta) diawali dengan $. NASM tidak menggunakan $.
* Pada perintah yang menggunakan operand sumber dan tujuan, format AT&T menuliskan tujuan sebagai operand kedua (contoh: CMD ,). Sedangkan NASM menuliskan tujuan sebagai operand pertama (contoh: CMD ,).
Register
Register adalah variabel internal yang sudah built-in di dalam prosesor yang bisa dipakai oleh programmer untuk bermacam-macam keperluan. Karena register posisinya di prosesor, bukan di memory, maka menggunakan register sebagai variabel jauh lebih cepat dibanding menggunakan variabel yang dismipan di suatu alamat di memori.
Berikut adalah jenis-jenis register yang ada pada prosesor Intel.
Kategori Nama Penjelasan
General Purpose EAX, EBX, ECX, EDX Lebar data 32 bit, boleh diapakai untuk keperluan apa saja. E adalah Extended (karena awalnya register general purpose hanya 16 bit).
AX,BX,CX,DX 16 bit bawah dari register 32 bit di atas. AX adalah bagian 16 bit bawah dari EAX.
AH,AL,BH,BL,CH,CL,DH,DL Bagian 8 bit dari register 16 bit di atas . AH adalah 8 bit atas dari AX. AL adalah 8 bit bawah dari AX.
Segment Register CS, SS, DS, ES, FS, GS Digunakan untuk menunjuk 16 bit awal alamat memori. CS = Code, SS = Stack, DS = Data, ES,FS,GS = Extra segment register
Offset Register Digunakan untuk menunjuk 16 bit akhir alamat memori. Alamat memori ditunjukkan dengan gabungan segment dan offset.
EBP Dipakai sebagai offset frame dalam stack. Biasanya menunjuk pada bottom of stack frame di suatu fungsi. ESP menunjukkan puncak stack, EBP menunjuk dasar stack.
ESI Biasanya dipakai untuk offset string sumber dalam operasi yang melibatkan blok memori.
EDI Biasanya dipakai untuk offset string tujuan dalam operasi yang melibatkan blok memori.
ESP Stack pointer, menunjukkan puncak dari stack.
Special EFLAGS Tidak bisa dipakai programmer, hanya dipakai prosesor untuk hasil operasi logical dan state.
EIP Tidak bisa dipakai programmer, hanya dipakai prosesor untuk menunjukkan alamat memori yang berisi instruksi berikutnya yang akan dieksekusi.
Perhatikan gambar di bawah ini untuk melihat register-register yang ada dalam prosesor keluarga IA32 (Intel Architecture 32 bit).
http://www.faculty.iu-bremen.de/birk/lectures/PC101-2003/01x86/80x86%20Architecture/registers.htm
courtesy of iu-bremen.de
Dalam gambar di ats terlihat bahwa register-register Extended (berawalan E) adalah register 32 bit. Agar kompatibel program-program sebelumnya ketika register hanya ada 16 bit, maka register yang lain adalah bagian bit bawah dari versi extendednya. Contohnya adalah register ESI dan SI. Register SI adalah 16 bit paling bawah dari ESI. Pada register EAX, AX adalah 16 bit paling bawah dari EAX. Register AX pun dipecah lagi menjadi 8 bit atas AH dan 8 bit bawah AL. Programmer bebas menggunakan yang mana saja sesuai kebutuhannya.
The Classic “Hello World”
Cukup sudah berteori, kini kita mulai berbasah-basah. Mari kita buat program pertama dalam assembly yang menampilkan teks “Hello World”. Dalam artikel ini saya menggunakan format syntax Intel, bukan AT&T. Silakan ketik source berikut dan simpan dalam nama hello.asm
; section text khusus buat code
section .text
global _start
_start:
; systemcall => write(1,msg,len)
mov edx,len ; panjang string dimasukkan dalam register EDX
mov ecx,msg ; alamat memori yang menyimpan string dimasukkan dalam register ECX
mov ebx,1 ; file descriptor (1=stdout=defaultnya console) disimpan dalam register EBX
mov eax,4 ; Nomor syscall 4 adalah fungsi sys_write()
int 0x80 ; panggil system call dengan interrupt 80 hexa.
; systemcall => exit(0)
xor ebx,ebx ; membuat EBX menjadi 0 sebagai return code ketika exit
mov eax,1 ; nomor syscall 1 adalah fungsi exit()
int 0x80 ; panggil system call dengan interrupt 80 hexa.
section .data ; section data khusus buat data/variable
msg db "Hello, World!",0xa ; String diikuti dengan 0xA yaitu new line \n.
len equ $ - msg ; Panjang string didapat dengan mengurangi address di baris ini dengan alamat string.
Setelah itu kita akan mengcompile file ASM itu menjadi object code berformat ELF dengan NASM (netwide assembler). Setelah itu akan terbentuk file hello.o yang harus dilink dengan linker LD agar menjadi format executable.
Selamat, anda telah berhasil membuat program Hello World dalam bahasa Assembly. Program di atas sangat sederhana, kita memanggil system call write() untuk menampilkan string (msg), kemudian kita memanggil system call exit() untuk keluar dari program dan program selesai. String msg kita taruh dalam section .data karena section tersebut khusus untuk menyimpan data/variabel. Sedangkan instruksi assembly disimpan dalam section .text karena section text khusus untuk menyimpan code.
Hello World Opcode
Untuk melihat keterkaitan antara assembly dan bahasa mesin kita bisa melihat opcode dari program assembly yagn kita buat dengan program objdump pada gambar berikut ini.
hubungan assembly dan opcode
Opcode di sebelah kiri adalah versi bahasa mesin dari bahasa assembly di sebelah kanannya. Hal ini menunjukkan eratnya kaitan antara assembly dan bahasa mesin. Contohnya adalah instruksi assembly INT 0×80 diterjemahkan ke bahasa mesin: 0xCD 0×80 (dalam hexa) atau 11001101 (binary dari 0xCD) 10000000 (binary dari 0×80).
Perhatikan bahwa pada source code assembly, “MOV EDX, len” setelah dicompile diterjemahkan menjadi “MOV EDX, 0xE”. Hal ini karena len adalah konstanta berisi panjang string “Hello, World!” yaitu sepanjang 14 karakter. Instruksi assembly pada source code “MOV ECX, msg” setelah dicompile diterjemahkan menjadi “MOV ECX, 0x80490a4″. Mengapa msg diterjemahkan menjadi 0x80490a4? Hal ini karena msg adalah address dari string “Hello, World!” sehingga setelah dicompile diterjemahkan menjadi alamat 0x80490a4. Terlihat juga pada gambar di atas pada lokasi 0x80490a4 terdapat string “Hello, World!”.
System Call
Dalam program hello world di atas kita memanfaatkan system call untuk menampilkan teks di layar monitor. System call adalah gerbang menuju kernel mode bagi program yang membutuhkan servis yang hanya bisa dikerjakan oleh kernel.
system call adalah gateway menuju kernel mode
System call di Linux dipanggil dengan menggunakan interrupt 80 hexa. Nomor system call dimasukkan dalam register EAX. Daftar lengkap nomor systemcall di Linux bisa dibaca di file header: /usr/include/asm/unistd.h. Berikut adalah cuplikan isi dari file unistd.h
Dalam contoh hello world kita memanfaatkan system call nomor 4 (write) dan nomor 1 (exit). Untuk mengetahui cara pemakaian dan argumen untuk system call tersebut, kita bisa gunakan man di Linux.
$ man 2 write
SYNOPSIS
ssize_t write(int fd, const void *buf, size_t count);
$ man 2 exit
void _exit(int status);
Dari manual system call write meminta 3 argument: yaitu file descriptor bertipe integer, alamat memori tempat string berada, dan terakhir adalah panjang string bertipe integer. Ketika argumen tersebut disimpan dalam register mulai dari EBX, ECX dan EDX. Argumen pertama di EBX, argumen kedua di ECX dan ketiga di EDX. Register EAX dipakai untuk menyimpan nomor system call. Dari manual system call exit meminta 1 argument: yaitu kode status bertipe integer yang disimpan dalam register EBX.
Dalam contoh hello world di atas kita menggunakan 3 intruksi assembly yaitu MOV, XOR dan INT. Mari kita bahas intstruksi tersebut.
Instruksi MOV
Kita menggunakan MOV untuk menyalin data dari sumber ke tujuan. Sumber dan tujuan bisa alamat memori, atau register. Perhatikan contoh berikut:
NASM/Intel AT&T Deskripsi
MOV EAX, 0×51 MOVL $0×51, %EAX Mengisi register EAX dengan nilai 51 hexa
MOV ESP, EBP MOVL EBP, ESP Menyalin isi register EBP ke register ESP
Perbedaan antara sintaks NASM dan AT&T adalah arah pengkopian. Dalam sintaks NASM, tujuan ada pada operand pertama, sedangkan dalam sintaks AT&T tujuan adalah operand ke-2.
Instruksi XOR
Instruksi XOR digunakan untuk melakukan operasi logika Xclusive OR. XOR akan menghasilkan 0 bila kedua operandnya sama, dan menghasilkan 1 bila tidak sama. XOR ini biasanya dipakai untuk membuat register menjadi 0 dengan melakukan XOR untuk operand yang sama seperti pada contoh hello world tersebut.
NASM/Intel AT&T Deskripsi
XOR EBX,EAX XOR %EAX,%EBX XOR isi EBX dengan EAX, hasilnya disimpan di EBX
Instruksi INT
Instruksi INT digunakan untuk mengirim sinyal interrupt ke prosesor. Dalam contoh di atas kita memakai interrupt nomor 80 hexa untuk meminta layanan dari kernel.
NASM/Intel AT&T Deskripsi
INT 0×80 INT $0×80 Memanggil interrupt nomor 80 hexa
Contoh Lain: Hello World X Times
Kali ini kita akan memodifikasi program hello world di atas agar bisa menampilkan pesan yang sama berkali-kali tergantung dari argumen yang dimasukkan user.
section .text
global _start
_start:
pop eax ; pop number of argc (diabaikan)
pop eax ; pop argv[0] (diabaikan karena berisi nama program)
pop eax ; pop argv[1] (ini dipakai untuk stringtoint)
call stringtoint ; ECX berisi argumen bertipe integer sebagai counter
_print:
push ecx ; selamatkan counter di stack karena ECX dipakai juga di _print_hello
call _print_hello ; print hello world
pop ecx ; ambil lagi counter dari stack karena akan dipakai untuk looping
loop _print ; kurangi ECX dengan 1, bila belum 0 kembali ke _print
; ini system call exit(0)
mov ebx,0
mov eax,1
int 0x80
_print_hello: ; systemcall write(1,msg,len)
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
ret
stringtoint: ; mengubah string di lokasi yang ditunjuk EAX menjadi integer di ECX
; EAX address of string
xor ecx,ecx ; clear ECX
xor ebx,ebx ; clear EBX
mov bl,[eax] ; BL berisi kode ASCII string di lokasi yang ditunjuk EAX
sub bl, 0x30 ; Kode ascii angka adalah 30h-39h, dikurangkan dengan 30h
add ecx,ebx ; ECX ditambah EBX, ECX berisi nilai integer
ret
section .data
msg db "Hello, World!",0xa
len equ $ - msg
Simpan source code di atas dengan nama helloxtimes.asm, lalu compile dan link seperti di bawah ini.
Kita belajar beberapa instruksi baru dalam contoh ke-2 ini, yaitu looping, penggunaan argumen dan prosedur, sedangkan system call yang dipakai tetap sama, yaitu write() dan exit().
Program kali ini menerima argumen berupa integer 1-9 yang dipakai sebagai counter berapa kali pesan akan muncul di monitor. Argumen ini diambil dari stack dengan instruksi POP. Pada puncak stack ada argc, yaitu jumlah argumen ketika program dijalankan. Di bawahnya berisi address dari argv[0] yaitu nama program. Kemudian di bawahnya lagi baru berisi address dari argv[1] yaitu parameter/argumen pertama. Perhatikan pada baris ke-6 s/d baris ke-8 ada instruksi POP EAX sebanyak tiga kali. Ini dilakukan karena yang diperlukan ada pada posisi ke-3 sehingga kita harus membuang 2 elemen di puncak sebelum bisa mengambil address argv[1]. Address argumen ke-1 diambil dari POP lalu disimpan dalam register EAX. Karena bentuknya masih string, maka harus diubah dulu menjadi integer dengan memanggil prosedur stringtoint pada baris ke-9.
Instruksi POP untuk Mengambil Argumen
Instruksi POP untuk Mengambil Argumen
Ketika program dijalankan dengan satu argumen seperti “./helloxtimes 7″. Maka jumlah argumen (argc) akan berisi 2, yaitu nama program itu sendiri, dan satu argumennya. ARGC akan disimpan pada puncak stack, dan elemen di bawahnya berisi alamat memori dari nama program, dan dibawahnya lagi berisi alamat memori dari argumen pertama. Perhatikan gambar di atas yang menunjukkan proses pengambilan alamat memori berisi string argumen pertama dari stack. Dalam contoh tersebut argumen adalah string “7″, yaitu karakter berkode ASCII 37 hexa diikuti dengan ASCII 0 (karakter NULL). Alamat memori berisi string argumen pertama itu diambil dari stack dan disimpan di register EAX.
Pada prosedur stringtoint, register EAX berisi address string yang akan diubah menjadi integer. Kita hanya mengambil karakter pertama saja, pada baris ke-35 dengan instruksi MOV, isi memori pada address yang ditunjuk oleh EAX dicopy ke register BL.
“MOV EBX, [EAX]” berbeda dengan “MOV EBX,EAX”. MOV EBX,[EAX] berarti menyalin isi memori pada alamat yang disimpan di EAX ke dalam register EBX. Sedangkan MOV EBX,EAX berarti menyalin isi register EAX ke register EBX
Saya menggunakan register BL karena kode ASCII lebarnya hanya 8 bit. Bila benar berisi angka, maka register BL akan berisi nilai 30h-39h (kode ascii untuk “0″-”9″). Setelah itu register BL dikurangi dengan 30h untuk mendapatkan nilai dari 0-9. Setelah itu hasilnya ditambahkan ke register ECX sehingga kembali dari prosedur ini dengan nilai integer hasil konversi di register ECX.
Setelah mendapatkan nilai argumen bertipe integer di register ECX, selanjutnya ECX ini perlu diselamatkan dulu dalam stack (baris 12) sebab ECX akan dipakai dalam prosedur _print_hello (baris 13). ECX dipakai sebagai alamat string msg ketika memanggil system call write(). Setelah kembali dari prosedur _print_hello, nilai ECX perlu dikembalikan seperti semula dengan POP ECX (baris 14) sebab akan dipakai sebagai counter dalam LOOP (baris 15). Ketika menjalankan instruksi LOOP, register ECX akan dikurangi 1, kemudian bila ECX > 0 maka program akan lompat ke _print. Bila ECX bernilai 0, maka loop berhenti dan menjalankan system call exit(0).
Setelah memahami cara kerja program contoh ke-2 itu. Sekarang mari kita bahas instruksi baru yang ada di sana: CALL, RET, PUSH, POP, LOOP.
Instruksi PUSH dan POP
Instruksi PUSH digunakan untuk menyimpan nilai ke dalam stack. Kebalikannya adalah instruksi POP untuk mengambil nilai dari stack. Stack dalam Linux membesar ke alamat memori yang lebih rendah. Puncak stack ada di alamat rendah, sedangkan dasar stack ada di alamat yang lebih tinggi.
NASM/Intel AT&T Deskripsi
PUSH value PUSHL value Menyimpan nilai ke dalam stack
POP dest POPL dest Mengambil nilai dari stack ke dest
Struktur Data Stack
Stack adalah struktur data yang mirip seperti tumpukan piring. Data yang diambil dari stack adalah data yang dimasukkan terakhir, atau istilahnya adalah LIFO (last in first out). Jadi kalau kita ingin mengambil data di tengah-tengah tumpukan, caranya adalah dengan mengambil dulu data dari puncak sampai habis, sehingga data yang kita inginkan berada di puncak stack.
PUSH dan POP dalam Stack
PUSH dan POP dalam Stack
Reguster ESP menunjukkan alamat memori dari puncak stack. Setiap ada instruksi PUSH, maka register ESP berkurang (ingat stack bertumbuh ke alamat yang makin mengecil) karena puncak stack berubah. Begitu pula bila sebaliknya bila ada instruksi POP, maka register ESP akan bertambah.
PUSH EAX
PUSH EAX di atas sama dengan dua instruksi di bawah ini:
SUB ESP, 4
MOV DWORD PTR SS:[esp], EAX
PUSH EAX (4 byte) bisa dilakukan dengan mengurangkan ESP dengan 4, kemudian menyalin isi EAX ke memori di lokasi SS:[ESP], yaitu di segment stack pada offset yang ditunjuk oleh ESP. DWORD PTR menunjukkan bahwa lebar data yang akan disalin ke memori dalam instruksi MOV itu selebar 4 byte.
POP EAX
POP EAX di atas sama dengan dua instruksi di bawah ini:
MOV EAX, DWORD PTR SS:[esp]
ADD ESP, 4
POP EAX (4 byte) bisa dilakukan dengan menyalin isi memori di lokasi SS:[ESP], yaitu di segment stack pada offset yang ditunjuk oleh ESP ke register EAX, lalu menambahkan ESP dengan 4. DWORD PTR menunjukkan bahwa lebar data yang akan disalin ke memori dalam instruksi MOV itu selebar 4 byte.
Instruksi CALL dan RET
Instruksi CALL digunakan untuk memanggil sebuah prosedur. Sedangkan RET dipakai untuk kembali dari prosedur kembali ke lokasi setelah instruksi pemanggilan. Ketika instruksi CALL dijalankan, prosesor menyimpan alamat instruksi sesudah instruksi CALL ke dalam stack (return address), kemudian prosesor lompat ke alamat subroutine yang dituju. Ketika instruksi RET dijalankan, maka prosesor mengambil (POP) return address (alamat yang di-push ketika CALL), kemudian loncat ke alamat tersebut.
NASM/Intel AT&T Deskripsi
CALL subroutine1 CALL subroutine1 Memanggil prosedur subroutine1
RET RET Kembali dari prosedur
CALL dan RET
Instruksi LOOP
LOOP digunakan untuk melakukan looping sejumlah nilai yang ada pada register ECX. Ketika ada instruksi LOOP, prosesor akan mengurangi nilai ECX dengan 1, kemudian membandingkan hasilnya. Bila nilai ECX sekarang masih > 0, maka prosesor akan loncat ke alamat yang ditunjuk dalam LOOP. Bila nilai ECX sekarang menjadi 0, prosesor tidak akan loncat, tapi melanjutkan mengerjakan instruksi selanjutnya setelah LOOP.
NASM/Intel AT&T Deskripsi
LOOP address LOOP address Looping ke alamat yang ditunjukkan oleh address bila ECX > 0.
Instruksi tunggal “LOOP address” ekivalen dengan 2 instruksi assembly berikut:
DEC ECX ; DECREMENT: ECX = ECX - 1, register ECX dikurangi 1
JNZ address ; JUMP IF NOT ZERO: Bila ECX masih belum 0, JUMP ke address
Ilustrasi LOOP
Pada gambar di atas ada dua kondisi yang mungkin yaitu ECX > 0 atau ECX = 0. Mungkin ada yang bertanya, lho bagaimana dengan kondisi ECX < 0 ? Ingat komputer hanya mengenal 2 simbol, yaitu 0 dan 1, jadi pada dasarnya tidak ada “-1″ atau “-0″ dalam representasi binary. Bilangan negatif direpresntasikan dengan pengkodean two-complement, silakan baca di signed number representation karena itu diluar topik yang kita bahas sekarang.
Bila ECX bernilai 0 sebelum mengerjakan instruksi LOOP, maka yang terjadi adalah program akan looping sebanyak 0xFFFFFFFF atau 4.294.967.295 kali. Hal ini terjadi karena 0 – 1 = -1 yang dalam binary adalah 0xFFFFFFFF dengan sistem two-complement.