Ditulis oleh Urabe Shyouhei tanggal 2012-02-16
Diterjemahkan oleh catcyborg
Pada OpenSSL, pilihan SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
untuk koneksi SSL
digunakan untuk mencegah kerentanan TLS-CBC-IV dijelaskan pada [1]. Itu
merupakan masalah yang diketahui pada TLSv1/SSLv3 tetapi itu menarik banyak
perhatian akhir-akhir ini karena serangan BEAST attack [2] (CVE-2011-3389).
Topik yang terkait dengan Ruby terdapat pada pelacak masalah kami [3].
Hingga sekarang ekstensi OpenSSL Ruby menggunakan pilihan SSL_OP_ALL
, yang
merupakan pilihan tergabung dari OpenSSL untuk bebagai macam solusi lain yang
seharusnya tidak berbahaya bagi semua koneksi SSL secara default. Dan itu hanya
mengizinkan para pengguna untuk menambah pilihan lain, jadi Anda tidak dapat
menghapus fitur yang tercakup pada pilihan SSL_OP_ALL
, seperti
SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
. Itu sengaja dilakukan karena itu tidak
mengekspos konstanta seperti SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
, tetapi kita
harus mengizinkan untuk meng-unset pilihan supaya ekstensi OpenSSL Ruby memasukkan
fragmen kosong di awal koneksi SSL (disebut juga "0/n splitting") untuk mencegah
serangan TLS BEAST.
Rilis ini mendefinisikan konstanta tambahan dan mengizinkan para penggunanya
untuk meng-unset pilihan pada SSL_OP_ALL
. Pilihan default tetap SSL_OP_ALL
tetapi
Anda dapat mensetup SSLSocket dengan melakukan "0/n splitting" untuk pencegahan BEAST
seperti ini.
ctx = SSLContext.new
ctx.options = OP_ALL & ~OP_DONT_INSERT_EMPTY_FRAGMENTS
ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
SSLSocket.new(socket, ctx)
Terima kasih kepada Apple untuk melaporkan masalah ini.
Catatan: Beberapa endpoint SSL diketahui untuk memiliki bug yang tidak dapat menangani "0/n splitting" dengan benar, maka kami (dan OpenSSL) tidak mengeset ini sebagai pilihan default. Harap uji konektifitas SSL sebelum mencoba ini pada environment production. Jika endpoint lain yang Anda hubungi tidak dapat menangani "0/n splitting", Anda harus menggunakan solusi lain untuk mencegah serangan TLS BEAST, seperti memaksa ciphersuite untuk menggunakan RC4. Untuk rinciannya, temukan diskusi dan sumber-sumber seputar CVE-2011-3389.