Network Security

Network Forensic: Analyzing Suspicious Network Traffic


Artikel ini mulai ditulis 24 jam setelah babak penyisihan Gemastik selesai. Dari 254 tim, Tim kami nyaris mendapatkan 4 flag untuk menuju final karena sebagian besar part dari flagnya sudah ditemukan :( . Namun sepertinya tahun ini belum diberi kesempatan untuk maju ke final karena kurang teliti dan saya sendiri tidak dalam mode try hard, hehe.

Walaupun hasil akhir tim kami tidak lolos, tetapi banyak yang saya pelajari dalam Gemastik tahun ini. Salah satu soal yang menarik bagi saya adalah tentang Network Forensic, Menganalisis paket traffic pada Wireshark. Hanya ada 1 tim yang menyelesaikan tantangan ini sehingga bobotnya tinggi (500 pts). "Solved gak bang? " yoo solved mazz, tapi pas time's up..

Deskripsi Soal

Our network was repeatedly bombarded by a port scanner targeting a specific ports. Interestingly, our server seems to provide different responses depending on its current state and the specific request it receives. Although nothing major happened, we believe there was a hidden intention behind the attacks.

Hint: We discovered that the actor was attempting to determine whether our service was open, closed, or blocked by the firewall.


Konsep Protokol TCP pada model TCP/IP

TCP adalah protokol yang connection oriented dan menjadi salah satu protokol inti dari Internet Protocol Suite (TCP/IP). Anggap saja TCP sebagai cara komputer untuk berbicara satu sama lain melalui internet. Protokol ini memulai koneksi dengan cara 3 Way Handshake. Berikut adalah cara kerjanya


  • Klien Mengatakan "Halo" (SYN): Komputer mu mengatakan "Halo" ke situs web (server) dengan mengirim paket SYN.

  • Server Menjawab "Halo Kembali" (SYN-ACK): Situs web (server) menjawab "Halo" kembali dengan paket SYN-ACK.

  • Klien Menjawab "Siap Berbicara" (ACK) dengan mengirim paket ACK.

Setelah itu, koneksi akan terbuka, dan kamu bisa mulai berbicara dengan situs web/server. Untuk menutup koneksi, protokol ini juga melakukan 3 way handshake, bedanya kita menggunakan paket FIN-ACK, dan bukan SYN-ACK


Port Scanning

Port Scanning adalah teknik yang digunakan untuk menemukan port terbuka pada server, Bisa digunakan untuk menemukan potensi titik masuk yang rentan pada jaringan. Ada banyak cara untuk melakukan port scanning dan menemukan port terbuka. Beberapa teknik lebih cepat, beberapa lebih sulit terdeteksi, dan ada juga yang lebih akurat.

Pilihan teknik tergantung pada apa yang kita perlukan. Namun pada kasus ini, kita akan menggunakan SYN Scan.


SYN Scan

SYN-scan adalah teknik pemindaian port yang sering disebut pemindaian setengah terbuka. Dalam teknik ini, paket SYN akan dikirim, lalu klien menunggu respons tanpa membuka koneksi TCP penuh. Ada 3 kemungkinan hasil:

  • Port Terbuka (Open): Jika server merespons dengan SYN-ACK, port dianggap terbuka.
  • Port Tertutup (Closed): Jika server merespons dengan RST, port dianggap tertutup.
  • Port Difilter (Filtered): Jika tidak ada respons, port dianggap difilter, biasanya oleh firewall.

Identifikasi Network Traffic

Sekarang saatnya terjun ke real problem pada soal. Buka wireshark dan akan muncul sebanyak 3.256 paket yang tampil pada layar. Kebanyakan dari protokol yang tampil merupakan Bad TCP sehingga oleh wireshark dihighlight dengan warna hitam. Hal ini menandakan beberapa kemungkinan, seperti malformed packet, Checksum error, ataupun Suspicious Traffic.


Karena saya cukup familiar dengan soal network forensics yang melibatkan wireshark, jadi ide awal yang muncul saat penyisihan adalah:

  • Mungkin flagnya di encode sebagai hex dan disisipkan diantara beberapa paket. Oleh karena itu saya mendecode string "gemastik" sebagai hex dan melakukan pencarian dari hex tersebut. Tapi ternyata tidak semudah itu :)

  • Saya juga mencoba melakukan pencarian dengan regex untuk string yang memuat karakter base64, dan tetap tidak ketemu

  • Ide terakhir yang muncul di benak saya adalah karakter ASCII. Karena ini kategori hard level, tidak mungkin flagnya disimpan sebagai plaintext dan tidak mungkin juga disimpan pada 1 paket tertentu. Jadi mungkin setiap karakter pada flagnya dibentuk dalam nomor ASCII.

Tapi, gimana ASCII nya ditemukan? karena bisa saja muncul pada tab hex wireshark, atau apapun yang berhubungan dengan 3 digit angka (mengingat ASCII table ada 127). Salah satu yang mungkin adalah portnya. Kenapa port? karena setelah dianalisis terdapat banyak port yang mungkin merupakan flagnya. Selain itu, deskripsi soal sudah cukup jelas, dan pada saat itu hint problem sudah turun.

Win-Win Solusyen

Berdasarkan penjelasan, konsep awal, dan ide sebelumnya, kita bisa tau cara server menanggapi paket SYN, kita bisa menilai apakah port terbuka, tertutup, atau terfilter. Kami membuat script python untuk menyelesaikan problem ini. Special thanks & credits to PwnEater & rin4th yang sudah berkontribusi pada script ini.


Logika dibalik script ini adalah melihat bagaimana server merespons permintaan ke port yang berbeda. Port ditandai sebagai "OPEN", "CLOSED", atau "FILTERED" berdasarkan flags TCP dalam paket respons. Setelah menemukan portnya, kita perlu mengubah nomor port menjadi karakter ASCII. Jika di run, maka akan mengeluarkan output yang terdiri atas 3 string base 64 (output keluar berdasarkan open, closed, atau filtered).


Jika string base 64 tersebut didecode maka akan menampilkan magic bytes dari signature file PNG. Lakukan decode untuk tiap base 64 dan simpan sebagai PNG. Hasilnya akan didapatkan 3 QR Code yang merupakan bagian dari flagnya.


Dari pengalamanku, Gemastik tahun ini merupakan CTF lokal tersulit setelah Cyber Jawara. Probset yang terpilih memang benar-benar berkualitas karena pernah menang event nasional maupun internasional. Terima kasih tim karena telah berusaha yang terbaik.