Pada September 2011 lalu dunia sempat dikejutkan dengan BEAST(Browser Exploit Against SSL/TLS) attack yang menyerang SSL/TLS oleh Thai Duong dan Juliano Rizzo. Serangan tersebut didemokan dalam Ekoparty 2011 dan dijelaskan dalam paper berjudul Here Comes the XOR Ninjas. Serangan ini practical dan terbukti efektif mencuri session ID yang disimpan dalam cookie website yang dilindungi dengan SSL/TLS (selanjutnya saya hanya menyebut SSL untuk SSL/TLS). Dalam tulisan ini saya akan membahas apa itu BEAST attack dan bagaimana cara kerjanya.
BEAST Attack
Bagi yang belum pernah mendengar BEAST attack silakan melihat dulu youtube, BEAST vs HTTPS yang
mendemokan bagaimana BEAST attack bisa digunakan membajak akun Paypal
korban. Dalam video tersebut terlihat bagaimana BEAST berhasil mendekrip
paket SSL satu byte per satu byte sampai akhirnya seluruh cookie korban
berhasil dicuri. Menakutkan bukan?
Gara-gara
BEAST attack ini rame-rame situs pengguna SSL mengubah algoritma
enkripsinya dari block cipher menjadi stream cipher (RC4). Lho kenapa
kok sampai harus mengganti dari block cipher menjadi stream cipher ?
Rupanya BEAST attack ini hanya menyerang SSL yang menggunakan algoritma
block cipher (e.g AES/DES/3DES) dalam mode CBC (cipher block chaining).
Dengan beralih ke stream cipher maka situs tersebut menjadi kebal dari
serangan BEAST.
Mari kita bahas ada apa dengan SSL block cipher dan mode CBC sehingga bisa dieksploitasi sampai sedemikian fatalnya.
Block-Cipher dan SSL Record
Sebelumnya sebagai background saya akan menjelaskan sedikit mengenai enkripsi dengan block-cipher dalam SSL.
SSL
pada dasarnya mirip dengan protokol pada transport layer seperti TCP
yang memberikan layanan connection oriented communication dan menjamin
reliability untuk layer di atasnya, hanya bedanya adalah data yang lewat
SSL dalam bentuk terenkripsi.
Kalau
dalam TCP ada yang namanya 3-way handshake untuk membentuk koneksi,
dalam SSL ada negotiation. Dalam proses negosiasi akan disepakati
algoritma (e.g encryption, key exchange,MAC) apa yang dipakai dan juga
disepakati kunci simetris yang dipakai untuk mengenkripsi data.
Perlu
diketahui SSL menggunakan algoritma simetris (e.g RC4, AES, DES) untuk
mengenkripsi data karena lebih murah komputasinya dibanding algoritma
asimetris (e.g RSA). Algoritma asimetris hanya dipakai selama proses
negosiasi saja untuk mengamankan proses pertukaran kunci simetris,
setelah session/channel/connection SSL terbentuk, algoritma asimetris
tidak dipakai lagi, semua komunikasi dalam channel SSL menggunakan
algoritma enkripsi simetris baik block-cipher maupun stream-cipher.
Dalam
channel SSL data dikirim dalam bentuk record SSL yang berukuran
maksimal 16 kB. Data yang dikirim adalah data yang ada pada layer di
atasnya seperti request/response HTTP dalam HTTPS (HTTP over SSL).
Data yang dikirim melalui channel SSL akan dipecah menjadi satu atau lebih SSL record sebelum dikirimkan ke tujuan dan semua record dienkrip dengan kunci simetris yang sama (satu kunci untuk client ke server, dan satu kunci untuk server ke client).
Sebagai pengingat saja, dalam block cipher dalam mode opeasi CBC, setiap blok plaintext di-XOR dengan blok ciphertext sebelumnya untuk menghasilkan blok ciphertext. Khusus untuk blok pertama, blok plaintext di-XOR dengan IV.
Chained IV
Bagaimanakah cara mengenkripsi SSL record ? Data plaintext yang akan dienkrip dalam SSL record tentu terdiri dari satu atau lebih blok plaintext, P1, P2, P3,…, Pn yang akan dienkrip menjadi ciphertext C1, C2, C3,… ,Cn. Ingat dalam CBC mode, dibutuhkan IV untuk menghasilkan C1, nah yang menjadi pertanyaan adalah dari manakah IV atau C0 ini berasal ?
Dalam RFC 2246 tentang TLS 1.0 dijelaskan begini:
With block ciphers in CBC mode (Cipher Block Chaining) the initialization vector (IV) for the first record is generated with the other keys and secrets when the security parameters are set. The IV for subsequent records is the last ciphertext block from the previous record.
No comments:
Post a Comment
silahkan berkomentar dengan baik