Konsep dasar TCP/IP 3-way-handshake, network sniffing, Man-in-The-Middle (MiTM), session hijacking yang dikemas dalam cerita kehidupan sehari-hari agar lebih mudah dimengerti : “Antara Aku, Kau, dan Dia. Sebuah kisah Cerita cinta antara Sofi, Andi dan Jovi”.
Konon, dahulu kala ada seorang pria bernama Andi yang terkenal karena ketampanan dan keramahannya. Berkat ketampanan dan sikapnya yang ramah terhadap setiap orang, maka banyak wanita yang ingin berkenalan dan menjadikan Andi sebagai pacarnya; tidak terkecuali Sofi, seorang gadis muda cantik yang sudah lama ingin menyatakan cinta dan memberikan perhatiannya sepenuhnya kepada Andi.
TCP/IP
Nah agar Sofi dapat mewujudkan impian cintanya, maka tentu saja pertama kali Sofi harus berkenalan dan melakukan komunikasi (baca: PDKT) sama Andi. Toh ga mungkin kan kalau kita tiba-tiba bilang cinta tanpa kenalan dulu sama orang begitu aja tanpa ada tindakan yang konsisten dari waktu ke waktu seperti perhatian, pengertian, kasih sayang, dll.
Nah dari perhatian, pengertian tersebut kita harus tau dan pinter membagi. Ga mungkin klo kita berikan perhatian terlalu besar misalnya : “Sayang, sudah makan belum? Makan dulu gih!”, “Sayang sudah mandi belum? Mandi dulu gih!” karena ntar dikira tukang ngatur, ga mungkin kita kasi pengertian ini itu brondongan secara langsung karena ntar dikira tukang ngomel, ga mungkin juga kita beri kasih sayang yang langsung seabrek karena ntar dikira kita murahan.
Konsepnya sama seperti konsep TCP/IP dimana kita tidak bisa mengirimkan paket besar sekaligus ke tempat tujuan, kita harus membagi paket besar tersebut menjadi paket-paket kecil dimana paket-paket tersebut akan ditandai dengan SEQuence number. Dengan identitas sequence number yang diberikan, penerima akan membangun pake-paket kecil tersebut berdasarkan nomor urutan sequence number sehingga menjadi paket besar yang utuh.
3-Way-Handshake
Maka dari itu, dengan segenap hati dan dengan segenap kegalauanya, Sofi memberanikan diri untuk mengajak kenalan si Andi melalui YM!.
1+------------------------------------------------------------------------------+
2 Halo Andi, gue Sofi mau ngomong sama kamu.
3 ____ -----------------------------------------> _
4-/ __"| u SYNchronize U /"\ u
5<\___ \// \/ _ \/
6 ___) | Hai Sofi, gue Andi boleh mari kita ngobrol / ___ \
7.|____/>> <========================================= /_/ \_\
8_)( (__) SYNchronize-ACKnowledgement \\ <<
9(__) (__) (__)
10 Oke, makasih Andi
11 ----------------------------------------->
12 ACKnowledge
13
14 <+-+-+-+-+-+-+-+ SYN, SYN-ACK, ACK = ESTABILISHED +-+-+-+-+-+-+-+>
Nah dari gambar yang ga jelas di atas bisa kita liat awal percakapan mereka ada 3 poin penting, yaitu:
- Sofi mengirim paket TCP SYNchronize kepada Andi.
- Andi menerima paket SYN dari Sofi dan Andi mengirim balasan SYNchronize-ACKnowledgement kepada Sofi.
- Sofi menerima SYN-ACK dari Andi dan Kemudian Sofi mengirimkan ACKnowledge.
TCP connection ESTABLISHED.
Atau secara teknis bisa digambarkan mirip seperti:
1 _ SYN ISN=5000 _
2 _ /|| ------------------(1)--------------------> ||\ _
3 ~% } \||D C||/ { )
4| /\__,=_[_] ACK=5001; SYN ISN=7000 [_]_=,__/\ |
5|_\_ |----| <=================(2)===================== |----| _/_|
6| |/ | | | | \| |
7| /_ | | ACK=7001 | | _\ |
8 Host A ------------------(3)--------------------> Host B
- Host A mengirim SYNchronize dengan ISN (Initial Sequence Number)
5000
.
* ISN / Initial Sequence Number adalah sequence number pertama yang dikirimkan dan bernilai random. - Host B menerima dan mengembalikan segmen TCP dengan SYNchronize-ACKnowledgement, dengan ISN
7000
dan ACK5001
.
* ACK5001
adalah sequence number berikutnya dari host A yang diharapkan oleh Host B. - Host A yang menerima ISN
7000
dari host B mengakui penerimaan ISN dari host B (ACKnowledgement7001
).
Kemudian komunikasi terus terjadi berdasarkan sequence number yang terus bertambah berdasarkan data yang dikirim dan diterima hingga akhir percakapan.
Nah, dari sini masing-masing sudah saling berkenalan dan tau identitas 1 sama lain. Dengan perkenalan yang sopan (3-way-handshake) proses komunikasi (baca: PDKT) dapat terus berlanjut. Dari ngobrol-ngobrol kecil, bicara tentang hobi, dll hingga Sofi dan Andi makin deket. Yah, yang namanya cinta boss, bikin 2 ekor insan itu senyam-senyum sendiri macem gajah melahirkan di depan komputer. Tapi ingat! Tidak jarang (baca:SERING) di sebuah hubungan ada yang namanya pihak ke-3 yang biasanya datang mengacau.
Sniffing & Man in The Middle (MiTM)
Di cerita ini muncul karakter baru sebagai pihak ke-3. Sebut saja namanya Jovi. Dia teman dekat Sofi dan Sofi sering cerita tentang Andi kepada Jovi (Tau ndiri kan gejala orang jatuh cinta, apa aja diomongin). Dari cerita-cerita Sofi, tumbuhlah rasa penasaran Jovi terhadap Andi.
Nah mulailah Jovi melakukan perannya sebagai pihak ke-3. Ia mencari tau dan menyimak bagaimana hubungan Sofi dengan Andi (baca:sniffing). Jovi mengamati jam berapa Sofi biasa chatting dengan Andi, bagaimana tata cara bahasanya, seperti apa penulisan bahasa alaynya, dll.
1 _ _
2 ~0 (_| . - ' - . _ . - ' - . _ . - ' - . |_) O
3 |(_~|^~~| | |~~^|~_)|
4 TT/_ T"T + T"T _\HH
5 Sofi | Andi
6 ___+___
7 |.-----.|
8 ||x . x||
9 ||_.-._||
10 `--)-(--`
11 __[=== o]___
12 |:::::::::::|\
13 `-=========-`()
14 Jovi
Seperti yang sudah saya tulis sebelumnya pada bagian TCP/IP bahwa data yang dikirim akan dipecah menjadi paket-paket kecil dengan sequence number untuk tiap paketnya. Dan untuk melakukan koneksi TCP antara host A dan host B harus melalui yang namanya 3-way-handshake terlebih dulu. Dari hasil shake hand 3 kali tadi akan mendapatkan sequence number sebagai indentitas yang terus bertambah berdasarkan data yang dikirim dan diterima. Dengan melakukan sniffing dan memperhatikan sequence number antara Sofi dan Andi, maka Jovi dapat melakukan sesuatu yang bernama Session Hijacking. Mari kita ambil contoh dari lanjutan gambar yang ga jelas sebelumnya yaitu :
1 _ SYN ISN=5000 _
2 _ /|| ------------------(1)--------------------> ||\ _
3 ~% } \||D C||/ { )
4| /\__,=_[_] ACK=5001; SYN ISN=7000 [_]_=,__/\ |
5|_\_ |----| <=================(2)===================== |----| _/_|
6| |/ | | | | \| |
7| /_ | | ACK=7001 | | _\ |
8 Host A ------------------(3)--------------------> Host B
9
10 <+-+-+-+-+-+-+-+-+-+-+-+ ESTABILISHED +-+-+-+-+-+-+-+-+-+-+-+>
11
12 _ SEQ=5001; DATA=128 _
13 _ /|| ------------------(4)--------------------> ||\ _
14 ~% } \||D C||/ { )
15| /\__,=_[_] ACK=5129 [_]_=,__/\ |
16|_\_ |----| <=================(5)===================== |----| _/_|
17| |/ | | | | \| |
18| /_ | | SEQ=5129; DATA=81 | | _\ |
19 Host A ------------------(6)--------------------> Host B
20
21 ACK=5210
22 <=================(7)=====================
23
24 <+-+-+-+-+-+-+-+-+-+-+-+ SESSION HIJACKING +-+-+-+-+-+-+-+-+-+-+-+>
25 _
26 SEQ=5210; DATA=50 ||\ _
27 _ ---------------(8)---------------> C||/ { )
28 ~0 (_| [_]_=,__/\ |
29 |(_~|^~~| ACK=5250 |----| _/_|
30 TT/_ T"T <==============(9)================ | | \| |
31 Host C | | _\ |
32 SEQ=5250; DATA=200 Host B
33 --------------(10)--------------->
34
35 <+-+-+-+-+-+-+-+-+-+-+-+ SESSION HIJACKING EFFECT +-+-+-+-+-+-+-+-+-+-+-+>
36
37 _ SEQ=5210; DATA=60 _
38 _ /|| ------------------(11)--------------------> ||\ _
39 ~% } \||D C||/ { )
40| /\__,=_[_] SEQ=5210; DATA=60 [_]_=,__/\ |
41|_\_ |----| ------------------(12)--------------------> |----| _/_|
42| |/ | | | | \| |
43| /_ | | ACK=5450 | | _\ |
44 Host A <=================(13)===================== Host B
45
46 SEQ=5210; DATA=60
47 ------------------(14)-------------------->
48
49 ACK=5450
50 <=================(15)=====================
- Host A (Sofi) mengirim SYNchronize dengan ISN (Initial Sequence Number)
5000
. - Host B (Andi) menerima dan mengembalikan segmen TCP dengan SYNchronize-ACKnowledgement, dengan ISN
7000
dan ACK5001
. - Host A yang menerima ISN
7000
dari host B mengakui penerimaan ISN dari host B (ACKnowledgement7001
). - Host A Mengirimkan SEQuence number
5001
dengan banyaknya data yang dikirim128
kepada host B. - Host B memberitahukan bahwa ia telah menerima paket dari dengan ACKnowledgement
5129
(SEQuence number Host A=5001 + Data yang dikirim Host A 128). - Host A mengirimkan SEQuence number
5129
dengan banyaknya data yang dikirim81
kepada host B. - Host B memberitahukan bahwa ia telah menerima paket dari dengan ACKnowledgement
5210
(SEQuence number Host A=5129 + Data yang dikirim Host A 81).
1<!– #break; –>
Ternyata eh ternyata, Jovi (host C) telah melakukan sniffing dengan memperhatikan SEQuence number dari komunikasi yang dilakukan oleh Sofi (Host A) dan Andi (Host B).
- Dari hasil sniffing Jovi (Host C), ia mengirimkan SEQuence number
5210
dan informasi data yang dikirimkan sebanyak50
kepada Andi (Host C). SEQuence number yang dikirimkan Jovi (Host C) ini berdasarkan ACKnowledgement dari Andi (Host B) untuk Sofi (Host A) - Seperti biasa, Host B mengirimkan ACKnowledgement paket yang ia terima kepada sang pengirim, yaitu Host C.
- Komunikasi berlanjut antara Jovi (Host C) dan Andi (Host B). Dari contoh ini, host C mengirimkan SEQuence number
5250
dengan informasi data yang dikirim sebanyak200
kepada host B.
1<!– #break; –>
Lalu apa yang terjadi dengan Sofi (Host A)? Tentu saja hubungan mereka terputus. Hal ini dimulai pada saat Jovi (Host C) mengirimkan SEQuence number 5210
kepada Andi (Host C) (tahap ke 8) dan Andi tidak mengirimkan ACKnowledgement-nya kepada Sofi (Host A) melainkan kepada Jovi (Host C) (tahap ke 9) Karena Jovi telah mengirimkan SEQuence number 5210
kepada Andi terlebih dahulu.
- Host A mengirimkan SEQuence number
5210
dengan banyaknya data yang dikirim60
kepada host B atas dasar ACKnowledgement dari host B sebelumnya (tahap ke 7). - karena host A tidak menerima ACKnowledgement dari Host B dari SEQuence number
5210
yang ia kirim, maka Host A mengira paket yang ia kirimkan kepada host B tidak sampai / rusak di tengah jalan; sehingga Host A mengirimkan lagi paket SEQuence number5210
-nya. - Karena terakhir kali host B menerima paket SEQuence number
5210
dan data yang dikirim50
dari Host C (tahap ke 10); Host B mengirimkan ACKnowledgement5450
kepada host A.
Hal ini terjadi terus menerus karena host A menerima ACKnowledgement yang tidak seharunya ia terima, dan Host B menerima SEQuence number yang seharusnya tidak ia terima. Kalau kata Parto di OVJ “Wayangnya Bingung, Dalangnya Juga Bingung”. Terjadilah apa yang dinamakan “ACK Storm”. (mengenai ACK Storm, MiTM, hijack menghijack mungkin bisa kita bahas di lain kesempatan yang juga berhungan dengan TCP RST flag dan ARP Cache Poisoning).
Hancur sudah hubungan Sofi dengan Andi, dan terciptalah hubungan Jovi dan Andi. Sadis? Sadis memang.. Ngenes? ngenes memang.. Tapi itulah hidup. You never know what you have until you lose it, and once you lose it, you can never get it back. Of course, Sofi going to get broken heart. That’s just part of growing up, and it makes Sofi stronger. Maybe, just maybe… Sofi and Andi can handle it better next time. x_x
Akhir kata, maksud hati menulis cerita cinta, apa daya jadinya seperti ini. Dari mana pula datangnya TCP, darimana pula datangnya Session Hijacking. Pembaca bingung, penulisnya juga bingung. Apapun itu, moga aja bisa berguna meskipun sederhana dan seadanya.