SSL menjamin confidentiality data dari endpoint ke endpoint, itu artinya di tengah jalan tidak ada pihak ke-3 yang bisa menyadap data yang dikirimkan. Nah, kalau di tengah jalan tidak bisa disniff, bagaimana dengan sniffing di salah satu endpoint, baik di komputer klien atau server? Itulah yang akan saya tunjukkan dalam artikel ini.
SSL: The Secure Tunnel for All
SSL adalah protokol yang menjamin confidentiality dan authentication komunikasi dari satu titik awal ke titik akhir. Data apapun yang dilewatkan melalui SSL dijamin aman dari pengintip di tengah jalan karena semua data dikirim dalam keadaan terenkripsi. Karena itu SSL sering dijadikan terowongan (tunnel) untuk membuat protokol lain yang tidak secure menjadi secure.
Contoh pemakaian SSL sebagai tunnel adalah pada https. Http sejatinya adalah protokol clear text, artinya semua request dan response http yang lewat tidak terenkripsi dan bisa disadap siapapun yang berminat. Namun untuk web tertentu yang sensitif seperti bank memerlukan jaminan confidentiality, oleh karena itu protokol Http ini dibungkus dan dilewatkan tunnel SSL, sehingga menjadi apa yang dikenal sebagai https yaitu http tunneled over SSL. Penjelasan lebih detil tentang https bisa dibaca di understanding https. Masih banyak protokol lain yang bisa dilewatkan tunnel SSL, antara lain IMAP, SMTP, POP, LDAP.
Sniffing at Endpoint
SSL memang menjamin keamanan sepanjang perjalanan dari titik asal menuju titik tujuan. Data yang terkirim dari dan ke komputer klien/server dijamin keamanannya karena terenkripsi. Kalau ada attacker yang mencoba mengintip data di tengah perjalanan, data yang dia dapatkan adalah data yang terenkripsi, bukan plain-text, sehingga tidak ada gunanya mengintip data yang dilindungi SSL.
Jaminan keamanan SSL hanya berlaku dari titik A ke titik B (end-to-end). Pertama saya harus jelaskan dulu apa yang dimaksud dengan titik. Titik disini adalah aplikasi atau program komputer yang berjalan di atas operating system, contohnya adalah browser, instant messenger, outlook. Aplikasi ada yang berfungsi sebagai client dan ada pula yang sebagai server.
Agar data yang dikirimkan aman, aplikasi tersebut harus melakukan enkripsi data terlebih dahulu sebelum mengirimkan data ke tujuan. Begitu pula dari titik penerima, data yang diterima harus dikenakan proses dekripsi agar bisa dimengerti dan bisa diproses. Proses tersebut digambar seperti pada gambar berikut ini:
Pada gambar di atas, dicontohkan yang menjadi titik adalah browser sebagai client dan web server sebagai server. Pada saat paket data diserahkan dari aplikasi ke network adapter (ethernet, wifi adapter dsb), paket tersebut sudah dalam keadaan terenkripsi. Jadi dalam aplikasi yang memakai SSL data yang dikirim dan diterima dalam keadaan terenkripsi, namun justru dalam aplikasinya sendiri data masih dalam keadaan tidak terenkripsi.
Data hanya aman ketika berada di luar rumah, justru di dalam rumah data tidak terlindungi enkripsi
Karena data hanya aman ketika berada di luar rumah (proses/aplikasi), maka ada peluang bagi aplikasi/proses lain yang memiliki hak akses yang cukup untuk melakukan sniffing ketika data masih berada di dalam rumah. Salah satu skenario attack yang mungkin adalah: dalam sistem operasi multi user seperti linux dan windows, ada satu user yang dipakai beberapa orang. Dalam kondisi ini ketika ada orang yang sedang browsing, maka orang lain dengan user yang sama bisa mengintip isi rumah browser korban. Hal ini dimungkinkan karena kedua orang tersebut login dengan user yang sama. Jadi walaupun korban sedang login mengggunakan https (SSL) di browser tersebut, attacker tetap bisa melakukan sniffing dengan cara masuk langsung ke dalam rumah proses browser korban.
Sniffing Google Talk SSL Traffic Agar lebih jelasnya mari kita langsung praktek mencoba sniffing SSL google talk di komputer yang sama. Sebelumnya anda harus sudah berhasil download oSpy. Kemudian silakan extract dan jalankan file oSpy.exe. Untuk dapat melakukan sniffing proses saya harus menginjeksi agen ke dalam proses tersebut. Agen ini mirip dengan mata-mata yang disusupkan ke daerah lawan agar saya bisa mendapatkan informasi segala sesuatu tentang lawan. Agen yang disusupkan ke proses googletalk.exe ini akan memberikan saya informasi fungsi apa saja yang dijalankan oleh sebuah proses.
Untuk menginjeksi agen, di dalam oSpy, klik menu Capture kemudian pilih menu Inject Agent. Silakan pilih proses yang akan diintip, dalam contoh ini saya memilih googletalk.exe. Setelah memilih proses, kemudian klik tombol Inject. Proses injeksi agen diperlihatkan pada gambar di bawah ini.
Setelah agen berhasil disusupkan ke sebuah proses, kini tiba saatnya untuk mengantifkan modus mata-mata, caranya adalah dengan klik menu Capture, kemudian pilih Start. Setelah itu saya coba login ke googletalk,kemudian saya klik Stop Capture untuk melihat hasil capture. Mari kita lihat informasi apa saja yang dikirimkan oleh agen yang saya susupkan ke daerah musuh.
Dalam gambar di atas terlihat informasi yang dikirim oleh agen rahasia saya. Google talk menggunakan https untuk melakukan authentication. Walaupun menggunakan https, namun agen rahasia saya mampu membaca paket http yang dikirimkan ke google dan yang diterima dari google.
POST /accounts/ClientAuth HTTP/1.1 Connection: Keep-Alive Content-Length: 171 Content-Type: application/x-www-form-urlencoded Host: www.google.com:443 User-Agent: Google Talk Email=rizki.wicaksono%40gmail.com&Passwd=%74%65%73%74%69%6E%67%70%61%73%73%77%6F%72%64&PersistentCookie=false&source=googletalk&accountType=HOSTED_OR_GOOGLE&skipvpage=true
Request POST tersebut mengirimkan username dan password saya dalam bentuk url encoded ke https://www.google.com. Namun karena username dan password salah, maka response yang didapatkan adalah 403 Forbidden. Kalau password benar, response status code adalah 200 OK.
Pada gambar tersebut juga terlihat bahwa sebelum googletalk mengirimkan data, dia memanggil fungsi EncryptMessage() yang gunanya mengenkrip pesan yang akan dikirim ke web server google. Begitu pula sebaliknya, data yang diterima dari web server google diterima oleh fungsi recv() setelah itu diikuti dengan fungsi DecryptMessage() yang gunanya mendekrip pesan yang diterima dari web server google.
Kesimpulan SSL adalah protokol yang sangat bagus karena bisa menjamin keamanan data dari titik ke titik. Namun keamanan data di titik itu sendiri tidak bisa dijamin SSL karena itu adalah domain dari keamanan sistem operasi. Dengan menggunakan oSpy saya bisa mengintip komunikasi SSL yang dilakukan sebuah aplikasi/proses. Komunikasi SSL tidak bisa diintip dengan menggunakan network sniffer seperti wireshark(ethereal) walaupun sniffer dijalankan di komputer yang sama dengan aplikasi. Kenapa network sniffer tidak berguna walau di komputer yang sama? Hal ini karena sniffer bekerja di layer physical dengan mengubah network adapter ke modus promiscious. Dalam gambar sebelumnya saya jelaskan bahwa data yang dikirimkan melalui network layer (physical layer) adalah hasil dari fungsi EncryptData(), yang artinya data tersebut sudah dalam bentuk terenkripsi, walaupun masih dalam satu komputer yang sama.
Dalam aplikasi yang menggunakan SSL, data hanya aman ketika berada di luar rumah (di luar process address space), sehingga data yang dikirim ke luar melalui network adapter sudah dalam keadaan terenkripsi. Untuk dapat melakukan sniffing SSL saya harus melakukan itu di dalam rumah (di dalam proses itu sendiri). Dalam gambar sebelumnya saya menjelaskan bahwa sebelum memanggil fungsi send(), proses memanggil fungsi EncryptData(). Fungsi inilah yang saya target karena fungsi ini mengubah plaintext menjadi ciphertext, plaintext inilah yang dilaporkan kepada saya oleh agen mata-mata saya (ospy).
Attack dengan oSpy ini akan efektif bila attacker telah mendapatkan akses penuh di sebuah komputer. Untuk menyadap password internet banking pengguna, bila keylogger tidak berguna karena user menggunakan virtual keyboard, bila FFSniff juga tidak berguna karena user tidak memakai Firefox, maka oSpy akan sangat berguna.
0 komentar:
Posting Komentar