Sunday, March 1, 2015

Boston Key Party 2015: Riverside

Soal ini ada dalam kategori forensik dengan nilai 200. Petunjuknya adalah sebagai berikut:
riverside
Kita diberi file PCAP. Biasanya PCAP yang diberikan adalah dalam kategori jaringan, tapi kali ini dalam kategori USB. Dengan membuka file PCAPnya menggunakan wireshark, didapatkan bahwa benda yang dimaksud adalah sebuah USB Mouse.
riverside2
Proses berikutnya adalah mencari tahu mengenai protol USB Mouse ini. Saya mendapatkan informasi dari dua URL ini:
http://wiki.osdev.org/Mouse_Input
http://www.usbmadesimple.co.uk/ums_5.htm
Setelah memahami protokolnya, saya mulai membuat decodernya dalam Python. Protokol mouse USB sangat mudah, byte pertama berhubungan dengan status tombol mana yang diklik, byte kedua dan ketiga menyatakan perpindahan koordinat relatif (x, y), dan byte terakhir menyatakan status scroll wheel (untungnya tidak dipakai di soal ini).

Untuk mengekstrak data dari PCAP saya menggunakan command line tshark:

tshark -r challenge.pcapng -Y "usb.transfer_type==0x01 && usb.endpoint_number.direction == 1 && usb.device_address==12 && usb.urb_type==URB_COMPLETE" -T fields -e usb.capdata > mousedata.txt

Saya memfilter hanya paket yang arahnya ke komputer, yang URB typenya URB_COMPLETE dan saya ambil datanya saja (4 byte untuk tiap transaksi).

Persoalannya adalah: apa yang dilakukan dengan USB mouse ini? apakah menggambar sesuatu? Ketika saya plot dengan program python saya, hasilnya seperti ini:
riverside3
Saya menggambar gerakan mouse, dengan alternasi warna setiap kali setelah klik. Saya juga menggambar di mana posisi klik, ternyata dari gambar di atas bisa dilihat bahwa USB mouse tersebut digunakan untuk mengetik keyboard virtual.

Lebih jelasnya seperti ini (saya remove gerakan mousenya karena tidak penting):
riverside4
Perhatikan bahwa itu berbentuk seperti keyboard. Dengan memperkirakan posisi keynya, didapatkan pesan:

the quick brown fox jumps ovver the lazy dog thekeyisiheardyoulikedsketchyetchingglastyear

Perhatikan bahwa ovver salah ketik (v terketik dua kali), ternyata bagian flagnya juga ada yang terketik dua kali (huruf g). Jadi flagnya adalah

iheardyoulikedsketchyetchinglastyear

(I heard you liked sketchy etching last year).

Source code solusinya:

Untuk Anda yang penasaran darimana saya tahu protokol USB, saya pernah mengimplementasikan remote control receiver USB berdasarkan library http://www.obdev.at/products/vusb/index.html

1 comment: