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:
Post a Comment