de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Elliot
Elliot
Question

Heartbleed: Mengapa klien supply panjang pesan sama sekali?

"memperbaiki bug ini adalah sederhana: periksa bahwa panjang dari pesan benar-benar sesuai dengan panjang dari permintaan yang masuk."

Mengapa kita bahkan memiliki klien melaporkan suhu udara turun sama sekali?

Jika kita dapat mengetahui panjang dari permintaan yang masuk, dapat't kita hanya menyimpulkan panjang pesan itu?

(Ini adalah pemrograman dan desain protokol pertanyaan.)

67 2014-04-12T18:25:29+00:00 3
 AviD
AviD
Pertanyaan edit 13 April 2014 в 3:47
Keamanan Informasi
tls
openssl
design-flaw
heartbleed
Thomas Pornin
Thomas Pornin
12 April 2014 в 7:02
2014-04-12T19:02:26+00:00
Lebih
Sumber
Sunting
#40605273

Saya tidak mengetahui apapun pasti, "resmi" jawaban tentang hal ini, tapi ini tampaknya menjadi bagian dari upaya genericity dan koherensi. Di SSL/TLS standar, semua pesan-pesan rutin mengikuti aturan pengkodean, menggunakan spesifik presentasi bahasa. Tidak ada bagian dari protokol "menyimpulkan" panjang dari panjang record.

Salah satu yang mencerahkan detail adalah ClientKeyExchange pesan: di SSL 3.0, dengan RSA key exchange, isi dari pesan jabat tangan adalah "raw" hasil enkripsi (yaitu 256 byte jika server menggunakan 2048-bit RSA key, ditambah 4-byte pesan jabat tangan header); di TLS 1.0 dan versi berikutnya, enkripsi hasilnya adalah "buram vektor" dengan tambahan dua-byte header yang berisi panjang, sehingga's 258 byte, bukan 256, dan masih dengan tambahan 4-byte jabat tangan header pesan. Perubahan ini menggambarkan akan standar desainer untuk mencapai ketat keteraturan dengan sedikit kesimpulan dari packet suhu udara sebanyak mungkin.

Salah satu keuntungan dari tidak menyimpulkan panjang dari struktur luar adalah bahwa hal itu membuatnya jauh lebih mudah untuk memasukkan ekstensi opsional setelah itu. Hal ini dilakukan dengan ClientHello pesan, misalnya.


Jika kita melihat hal-hal dari sudut pandang, TLS hanya setengah-selesai. TLS, sebagai protokol, kebutuhan untuk pertukaran data terstruktur; pengirim dan penerima harus dapat encode dan decode data tersebut dengan tidak ada ambiguitas, dan sebaiknya tidak ada buffer overflow baik. Salah satu strategi yang harus dilakukan berikut ini:

  • Menentukan ketat, rutin aturan pengkodean terstruktur elemen. Misalnya, menentukan bahwa setiap elemen harus didahului oleh sebuah header yang berisi panjang dari elemen.
  • Menentukan ambigu bahasa untuk mengekspresikan struktur dan tipe semua pesan sebagai bagian dari protokol standar; yang's "presentasi bahasa" dari RFC.
  • Menulis generik compiler perangkat lunak, di mana anda paste presentasi bahasa dari RFC, dan yang menghasilkan sebuah encoder/decoder implementasi yang menangani encoding dan decoding semua pesan, dengan sistematis pemeriksaan pada semua panjang dan rentang nilai dan sebagainya.

Perwujudan dari strategi ini adalah ASN.1. ASN.1 digunakan, misalnya, dalam sertifikat X. 509; dengan ASN.1 compiler, anda bisa (secara teoritis) paste ASN.1 sintaks dari X. 509 standar dan mendapatkan lengkap encoder/decoder mesin untuk sertifikat X. 509 (saya telah melakukan itu, termasuk tulisan saya sendiri ASN.1 compiler, dan ada beberapa "kebiasaan", termasuk fakta bahwa ASN.1 jenis untuk string dan tanggal tampaknya telah diciptakan oleh babon pada LSD, tetapi skema keseluruhan masih bekerja).

Perwujudan lain adalah XML, dengan XML Schema sebagai "presentasi bahasa": anda mendorong skema dan input data ke XML parser, dan jika sesuatu yang lain dari sebuah kode kesalahan yang dihasilkan, maka anda know bahwa semua data sesuai dengan skema, dan anda dapat berjalan di decoded, terstruktur pohon. Lagi-lagi,'s teori, yang bagus, sejauh teori-teori saja.

"presentasi bahasa" TLS jatuh sedikit pendek di sini: tidak memiliki compiler. Bahwa bahasa looks seperti "bahasa komputer", tapi hal itu dimaksudkan untuk membaca manusia. Untuk itu, ia bekerja dengan baik; namun, ini berarti bahwa developer akan memiliki untuk menuliskan bahasa itu menjadi sebuah encoder/decoder. Pengembang harus berhati-hati untuk tidak melupakan langkah. Dan yang's apa yang terjadi dengan "heartbleed" bug: langkah dilupakan, yang dapat memiliki konsekuensi yang mengerikan.

37
0
Solution / Answer
dr jimbob
dr jimbob
13 April 2014 в 9:21
2014-04-13T09:21:23+00:00
Lebih
Sumber
Sunting
#40605274

Untuk TLS dengan tujuan dari keaktifan (tetap hidup) cek, ada's tidak ada alasan untuk:

  1. Encode muatan ukuran lapangan dalam detak jantung request/response header (panjang payload berasal dari catatan layer rrec.panjang di OpenSSL kode-anda hanya harus kurangi off tetap HB ukuran header ini),
  2. Memungkinkan HBs untuk variabel ukuran-kecil HB ukuran (dalam kisaran ~4-32 byte) akan bekerja dengan sempurna -- hanya cukup untuk nomor urut,
  3. Tambahkan bantalan untuk payload, ATAU
  4. Melakukan PMTU penemuan (didefinisikan di bawah ini) Sehingga desain cacat dan overcomplicated dalam hal biasa TLS. Catatan TLS adalah banyak digunakan protokol kita benar-benar peduli, mengenkripsi semua HTTPS lalu lintas. Di OpenSSL yang rentan melakukan semua yang dihasilkan Detak jantung permintaan kecil tetap payload (18 byte) dan ketika pengolahan yang diterima HB respon, OpenSSL hanya memeriksa dua byte yang mengandung HB nomor urut. Sumber: t1_lib.c (yang berisi semua TLS HB kode) ketika menghasilkan HB (hanya dijelaskan dalam tls1_heartbeat ), perbaikan payload size di 18. Pengolahan HB respon di tls1_process_heartbeat juga hanya tidak bermakna apapun pengolahan jika muatan yang tepat 18. Catatan pengolahan permintaan di TLS adalah rentan part yang dirusak HTTPS. Latar belakang Sebelum masuk ke mengklaim pembenaran, saya harus memperkenalkan tiga konsep: DTLS, PMTU, dan PMTU penemuan yang berhubungan dengan keaktifan cek, tapi berurusan dengan lainnya yang diusulkan digunakan untuk Detak jantung ekstensi. Skip to diusulkan pembenaran jika anda akrab. TLS (enkripsi pada TCP) dan DTLS (enkripsi pada UDP) Biasa menambahkan enkripsi TLS di atas TCP. TCP adalah protokol transport-layer yang menyediakan transportasi yang handal stream, yang berarti aplikasi menerima kembali data stream dengan semua paket yang disajikan untuk aplikasi dalam urutan asli setelah semuanya ada, bahkan jika beberapa harus menunggu beberapa waktu ekstra untuk paket yang akan membenci. TCP juga menyediakan kontrol kongesti (jika paket-paket yang dijatuhkan karena kemacetan, TCP akan menyesuaikan tingkat paket-paket yang dikirim). Semua HTTP, HTTPS, SFTP lalu lintas dikirim melalui TCP. Datagram TLS (DTLS) adalah sebuah protokol baru yang menambahkan enkripsi di atas UDP (dan mirip datagram protokol seperti DCCP dimana aplikasi ini memiliki kontrol penuh atas bagaimana untuk mengirim paket-paket). Ini adalah protokol lapisan transport yang tidak memberikan handal sungai, tapi mengirim paket secara langsung antara aplikasi client/server seperti yang dikendalikan oleh sebuah aplikasi. Dengan TCP jika paket hilang maka secara otomatis akan membenci dan keterlambatan pengiriman selanjutnya paket-paket sampai paket yang hilang melalui. UDP memberikan paket tingkat kontrol untuk aplikasi, yang sering diinginkan untuk komunikasi real-time seperti dua-cara video chat. Jika paket A, B, C, D dikirim tapi paket C itu hilang, itu doesn't masuk akal untuk menunggu C akan membenci sebelum menampilkan paket D untuk pengguna -- menyebabkan panjang jeda. PMTU Untuk DTLS, hal ini diinginkan untuk mengetahui path unit transmisi maksimum. MTU untuk satu link antara router adalah ukuran paket maksimum yang dapat dikirim. Router yang berbeda dan jenis link yang sering mendukung Mtu yang berbeda. Path MTU (MTU terkecil di jalan anda mengambil paket melalui jaringan) pada umumnya tidak akan dikenal terlebih dahulu sebagai properti dari jalur yang melalui jaringan tersebut. Jika anda mengirim datagram yang lebih besar dari PMTU, mereka akan memiliki untuk fragmen pada MTU terkecil yang tidak diinginkan untuk beberapa alasan (tidak efisien, paket terfragmentasi dapat dijatuhkan oleh firewall/NAT, yang membingungkan untuk lapisan aplikasi, dan ipv6 dengan desain yang tidak akan pernah fragmen paket). Jadi dalam konteks DTLS, RFC pasukan data dari rekam lapisan untuk muat dalam satu DTLS paket (yang lebih kecil dari PMTU). (Dengan TLS ini PMTU masalah yang ditangani pada TCP tingkat; tidak lapisan aplikasi agar anda TLS dapat agnostik untuk PMTU). PMTU discovery Ada protokol untuk menemukan PMTU — khusus pembentukan paket layer Path MTU discovery (RFC 4821). Dalam konteks ini, anda menyelidiki jaringan dengan mengirimkan paket-paket dari berbagai ukuran (dikonfigurasi untuk tidak fragment) dan melacak batas atas dan batas bawah dari PMTU tergantung apakah paket-paket yang dibuat melalui jaringan atau tidak. Hal ini dijelaskan dalam RFC4821. Jika probe paket membuatnya melalui, anda menaikkan batas bawah, jika itu akan hilang anda menurunkan batas atas sampai bagian atas/batas bawah dekat dan anda memiliki perkiraan PMTU, yang digunakan untuk mengatur atas ukuran pada DTLS paket.

    Mengklaim Pembenaran HB Memiliki Payload Header, padding, setelah sampai 2-byte ukuran lapangan Detak jantung RFC RFC6520 mengatakan anda dapat menggunakan Detak jantung untuk path MTU discovery untuk DTLS:

    5.1. Path MTU Discovery DTLS melakukan path MTU discovery seperti yang dijelaskan dalam Bagian 4.1.1.1 dari [RFC6347]. Penjelasan rinci tentang bagaimana untuk melakukan jalan MTU penemuan ini diberikan dalam [RFC4821]. Yang diperlukan probe paket ini adalah HeartbeatRequest pesan. DTLS aplikasi yang tidak perlu untuk memperkirakan PMTU. Namun, hal ini tidak dilakukan oleh DTLS, yang dilakukan oleh aplikasi menggunakan DTLS. Melihat dikutip bagian dari DTLS RFC Bagian 4.1.1.1 dari RFC6347 menyatakan "Secara umum, DTLS's filsafat adalah untuk meninggalkan PMTU discovery untuk aplikasi." Ini terus memberikan tiga keberatan mengapa DTLS harus khawatir tentang PMTU (DTLS aplikasi harus kurangi off DTLS header untuk mendapatkan efektif PMTU ukuran untuk data, DTLS mungkin harus berkomunikasi ICMP "Datagram Terlalu Besar" kembali ke lapisan aplikasi, dan DTLS jabat tangan harus lebih kecil dari PMTU. Sebelumnya di DTLS RFC itu menyatakan DTLS catatan HARUS disimpan dalam satu datagram lebih kecil dari PMTU, jadi PMTU discovery/estimasi harus dilakukan oleh aplikasi menggunakan DTLS. Di PMTU penemuan itu masuk akal untuk memiliki sebuah lapangan kecil yang menjelaskan panjang payload, memiliki sejumlah besar sewenang-wenang padding, dan memiliki sesuatu yang echos kembali, yup mendapat permintaan anda dengan ukuran MTU meskipun saya'm hanya mengirim anda kembali urutan nomor (dan efisiensi dapat menjatuhkan padding pada respon). Yang diberikan itu doesn't masuk akal jika anda menggambarkan ukuran muatan untuk memungkinkan payload yang lebih besar dari sekitar ~4-32 byte, sehingga ukuran payload bisa diperbaiki atau dijelaskan oleh satu byte lapangan, bahkan jika sewenang-wenang panjang padding bisa bersambung. Analisis Klaim OpenSSL HB pelaksanaan dan keterangan di HB RFC, doesn't menggambarkan atau melakukan ini PMTU discovery protocol. MTU tidak hadir dalam kode. OpenSSL tidak hanya menyediakan satu mekanisme untuk menghasilkan HB permintaan di TLS dan DTLS, tetapi ukuran tetap (18 byte payload, tidak dikonfigurasi).

  5. Ada's tidak ada fungsi untuk mengirim urutan HBs untuk probe untuk PMTU penemuan di OpenSSL kode, atau deskripsi rinci tentang bagaimana HBs digunakan dalam menyelidiki proses,
  6. Ada's tidak ada indikasi bahwa HBs dikonfigurasi untuk tidak fragmen (sehingga mereka bahkan bisa digunakan di menyelidik ini dengan cara),
  7. Jika anda ingin menggunakan HB untuk melakukan PMTU penemuan, aplikasi penulis harus menulis kode sendiri untuk klien dan server.
  8. Muatan bidang bahkan dalam konteks mencari PMTU hanya perlu satu byte (bahkan jika tidak tetap)
  9. Ada's tidak ada alasan bagi mereka untuk tidak hanya melakukan seluruh menyelidik proses untuk menggunakan paket HB terhadap setiap sewenang-wenang jenis paket dalam aplikasi client/server; misalnya, menggunakan biasa paket UDP.
  10. PMTU discovery hanya masuk akal dalam konteks DTLS, jadi mengapa ini benar-benar fitur yang tidak perlu hadir di TLS detak jantung -- aplikasi yang tidak perlu PMTU sadar? Di terbaik, ini adalah serius cacat desain (TLS) menggabungkan YAGNI fitur, yang kemudian dikodekan buruk untuk sepenuhnya kepercayaan yang diberikan oleh pengguna bidang header tanpa kewarasan pengujian. Pada terburuk, PMTU bagian yang cukup rumit cerita sampul untuk memungkinkan penyisipan kode yang rentan yang menyediakan beberapa kemiripan pembenaran.

    Mencari melalui IETF TLS milis Jika anda mencari IETF TLS mailing list, bisa anda temukan menarik nugget. Mengapa muatan/padding panjang uint16, dan mengapa ada padding jika harus dibuang? PMTU discovery. Sama asker (Juho Vähä-Herttua) menyatakan dia akan sangat sukai paket verifikasi: baca muatan suhu udara, bantalan suhu udara, dan pastikan bahwa itu sesuai catatan panjang (minus header). Juga Simon Josefsson:

    saya memiliki satu keprihatinan ringan dengan perijinan sewenang-wenang muatan. Apa alasan untuk ini? Terbuka untuk saluran samping di TLS. Itu bisa juga disalahgunakan untuk mengirim non-standar data. Selanjutnya, apakah ada alasan untuk memungkinkan sewenang-wenang berukuran muatan? Dalam pendapat saya, payload_length, muatan dan bidang padding tampaknya tidak perlu untuk saya. Michael Tüxen's respon sebagian besar tidak memadai (mungkin beberapa fitur yang ingin ditambahkan di atas untuk menghitung mengatakan RTT) dan merangkum dengan "intinya di sini adalah bahwa untuk interoperabilitas, itu tidak peduli apa muatan, itu hanya penting bahwa itu adalah tercermin." Juga dari catatan alasan random padding "[kita] mengacak ... data dalam detak jantung pesan untuk mencoba untuk kepala dari setiap masalah yang terjadi dari lemah atau cacat cipher. " diikuti oleh pertanyaan "Apakah ada makalah atau cipher dokumentasi membahas bagaimana menggunakan rancangan acak kelompok data dalam sebuah paket akan memecahkan masa depan mungkin cipher kekurangan?", diikuti oleh kertas di deterministik dikonfirmasi enkripsi. The respon yang lebih besar: Memang, tapi ini bukan generik mode enkripsi seperti CBC atau CTR. Ini ini secara khusus dirancang untuk mengenkripsi kunci acak, dan dengan demikian tergantung pada its keacakan. Khas enkripsi mode yang dirancang khusus untuk mencegah seseorang membedakan yang diberikan plaintext enkripsi dari acak. Sekarang, jika seseorang ingin menggunakan subliminal channel di TLS, detak jantung ekstensi sekarang menyediakan aplikasi yang tak terbatas channel. It's menarik bahwa komentar itu tidak pernah dibahas. (Selain dari orang lain komentar " Baik's seluruh masalah yang berbeda....").

dr jimbob
dr jimbob
Jawaban edit 21 September 2019 в 2:24
32
0
Steffen Ullrich
Steffen Ullrich
12 April 2014 в 6:47
2014-04-12T18:47:29+00:00
Lebih
Sumber
Sunting
#40605272

Jika anda melihat ke RFC6520 (detak jantung ekstensi) ada padding setelah muatan. Jadi panjang ini diperlukan untuk mengetahui di mana muatan berakhir dan padding dimulai. Selain itu saya menemukan desain overengineered: kedua alasan untuk ekstensi ini tampaknya akan membuat PMTU mungkin (dengan menggunakan pesan-pesan ukuran yang berbeda) dan dengan memiliki detak jantung untuk mengetahui jika ujung yang lain masih hidup atau untuk mengatur ulang beberapa timeout counter di negara-negara middleboxes. Ada tidak perlu untuk mendapatkan yang ditentukan pengguna muatan tercermin dalam skenario ini.

Dan dari perspektif keamanan semacam ini overengineered protokol, di mana anda hanya menguji hal-hal yang anda benar-benar perlu, hanya mengemis untuk masalah masa depan.

 Whymarrh
Whymarrh
Jawaban edit 20 April 2014 в 10:57
14
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 6 jam yang lalu
2
Akshit Mehta
Terdaftar 2 hari yang lalu
3
me you
Terdaftar 5 hari yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
security.stackexchange.com
di bawah lisensi cc by-sa 3.0 dengan atribusi