Serangan Ekstensi Panjang adalah serangan yang terkait dengan properti jenis fungsi hash tertentu seperti MD5, SHA-1, dan SHA-2. Sederhananya, serangan ini mengeksploitasi fakta bahwa dengan mengetahui H(pesan) dan panjang pesan, kita dapat dengan mudah menghitung H(message || padding || extension) tanpa mengetahui pesan itu sendiri. Diantaranya, "||" berarti koneksi, dan "padding" ditambahkan sesuai dengan ketentuan fungsi hash.
Hal ini karena fungsi hash ini menggunakan struktur Merkle-Damgård, yang membagi input menjadi beberapa blok, dan hash setiap blok bergantung pada hash dari blok sebelumnya. Ini berarti bahwa setelah kita menghitung hash dari pesan tertentu, kita memiliki keadaan di mana kita dapat memulai dan menambahkan lebih banyak blok.
Mode verifikasi sisi server
Untuk memudahkan deskripsi skenario kerentanan, pertama-tama kita berasumsi bahwa ada mode otentikasi sisi server, yaitu, ketika pengguna mencoba masuk, server akan meneruskan hash tertentu berdasarkan ID pengguna, nama, dan a Kunci 30-bit hanya diketahui oleh server. Algoritme menghasilkan nilai hash dan mengirimkannya ke klien. Selanjutnya, ketika klien mencoba mengakses antarmuka tertentu, seperti antarmuka untuk mengubah izin pengguna, server akan membuat ulang hash untuk verifikasi berdasarkan ID peran, nama peran, izin peran, dan kunci front-end 30-bit yang sama. akhir POSTING. Jika hash yang diunggah konsisten dengan hash yang dihasilkan oleh server, verifikasi dianggap berhasil, dan izin peran baru ditulis ke database.
Untuk memudahkan pemahaman, berikut beberapa kode sederhana yang ditulis sesuai uraian sebagai contoh:
Berpikir melampaui otoritas
Karena celah dalam mode verifikasi, penyerang dapat melewati verifikasi izin dengan merekonstruksi permintaan transaksi tanpa mengetahui SecretKey. Ide inti dari serangan tidak sah adalah untuk mengeksploitasi karakteristik serangan ekspansi panjang. Penyerang pertama-tama perlu mendapatkan nilai hash asli dan menghitung panjang data asli melalui algoritma iteratif sederhana. Setelah informasi ini diperoleh, parameter tambahan yang tidak sah dapat ditambahkan ke data asli dan algoritma hashing yang sama dapat digunakan untuk menghasilkan hash berbahaya.
Prinsip serangan ekstensi panjang
Serangan Ekstensi Panjang terjadi karena mekanisme internal beberapa fungsi hash. Fungsi-fungsi ini pertama-tama membagi data menjadi potongan-potongan dengan panjang tetap sebelum memproses data masukan, dan kemudian mengisinya di akhir setiap potongan untuk memenuhi persyaratan tertentu. Desain ini memungkinkan penyerang untuk membangun nilai hash baru yang efektif dengan menambahkan dan menambahkan data baru sambil mengetahui nilai hash dan panjang pesan asli.
Ambil SHA-256 sebagai contoh, yang bekerja pada blok 512-bit. Untuk data yang panjangnya bukan kelipatan 512 bit, diperlukan padding. Aturan pengisiannya adalah sebagai berikut:
Tambahkan bit "1" di akhir data;
Tambahkan sejumlah bit "0" tertentu sehingga panjang data modulo 512 sama dengan 448 (untuk lebih jelasnya lihat [1] );
Tambahkan blok sepanjang 64-bit di bagian akhir untuk mewakili panjang data asli.
Singkatnya, "1" diikuti oleh m "0", ditambah bilangan bulat 64-bit atau 128-bit, ditambahkan ke akhir pesan untuk menghasilkan pesan padding dengan panjang 512*n. Bilangan bulat yang ditambahkan adalah panjang pesan asli. Pesan padding kemudian diproses oleh fungsi hash menjadi n blok 512-bit.
Metode konstruksi
Dalam contoh ini, kita akan menggunakan kode yang disebutkan dalam gambar di atas sebagai skenario spesifik, dengan string datanya adalah data="user_id=1&user_name=aa" dan kuncinya adalah SecretKey="Length_extension\ _attact\ _rahasia". Server akan mengurai bidang data dalam data yang diunggah dan mengurai parameter yang diperlukan user_id dan user_name melalui pembatas &. Jika bidang peran ada, server juga akan memperoleh nilai bidang ini. Server kemudian melakukan hashing pada semua kolom dengan SecretKey dan membandingkannya dengan hash verifikasi yang diunggah. Jika nilai hash konsisten, parameter dianggap mematuhi aturan dan langsung digunakan.
Pertama, kita masuk ke antarmuka loginHandler untuk mendapatkan nilai hash hash="37d310d3465506486431fb2c2eb163f0f470479703f66dc9e5fdead8a3390c68" yang dihasilkan menggunakan SHA-256 berdasarkan data dan SecretKey.
Selanjutnya, kita akan membahas betapa sulitnya memecahkannya. Mengambil contoh situasi pengujian kami, sesuai dengan prinsip serangan ekstensi panjang, selama kami mengetahui H (pesan) dan panjang pesan, kami dapat menambahkan data baru melalui serangan ekstensi panjang. Pesan asli = SecretKey + data, sekarang kita punya H(pesan), kita hanya perlu mengetahui panjang pesan untuk membuat nilai hash baru. Karena SecretKey adalah kunci 30-bit, panjang pesan sebenarnya dapat diketahui hanya setelah 30 iterasi. Oleh karena itu, kita dapat dengan mudah membuat nilai hash baru. Karena kita perlu menggunakan izin admin, kita perlu menyambungkan bidang berbahaya "&role=admin" ke dalam data asli.
Kita dapat memanfaatkan fitur serangan ekstensi panjang untuk menambahkan data baru dan menghasilkan nilai hash baru tanpa mengetahui SecretKey. Perpustakaan yang sudah mengimplementasikan fungsi ini digunakan di sini [2] untuk menyelesaikan tes. Kemudian gunakan alat tersebut untuk menghasilkan nilai hash baru.
Karena verifikasi antarmuka adminActionHandler memverifikasi hash berdasarkan user_id, user_name dan peran yang diunggah, data yang kami unggah saat ini adalah user_id=1, user_name=aa\x80\x00\x00\x00 \ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x70 dan role=admin, seperti terlihat pada gambar di bawah ini:
Nilai hashnya adalah 84ae4ae437eeabf3bd8a26294392770b86f64a81998194156ac003d58a21acd0. Kemudian Anda dapat memanggil antarmuka adminActionHandler Setelah menerima data, server akan membandingkan hash yang diunggah dengan sha256 (SecretKey + fakeData), dan melakukan beberapa operasi sensitif setelah melewati verifikasi. Dengan cara ini, kami berhasil melewati verifikasi sisi server dengan menggunakan serangan ekstensi panjang, dan menyadari operasi yang tidak sah.
Skenario serangan lainnya yang mungkin terjadi
1. Verifikasi Integritas File: Jika integritas file diverifikasi dengan menggabungkan kunci dan konten file, lalu melakukan hashing, maka penyerang dapat memperluas file dan menghasilkan hash yang valid, sehingga melewati pemeriksaan integritas ;
**2. Keamanan aplikasi web: **Dalam aplikasi web, jika fungsi hash yang rentan terhadap serangan ekstensi panjang digunakan untuk memverifikasi data yang dikirimkan oleh pengguna, penyerang dapat memanfaatkannya untuk mengirimkan data berbahaya;
3. Tanda tangan digital: Dalam beberapa skema tanda tangan digital, jika tanda tangan dihasilkan dengan menggabungkan kunci pribadi dan pesan lalu melakukan hashing, maka penyerang dapat memperluas pesan dan menghasilkan tanda tangan yang valid;
**4. Penyimpanan Kata Sandi: **Meskipun jarang terjadi, jika kata sandi disimpan dengan menggabungkan kunci (seperti garam) dan kata sandi, lalu melakukan hashing, penyerang mungkin mencoba memecahkannya menggunakan kata sandi serangan ekstensi panjang.
Cara mencegahnya
1. Pilih fungsi hash yang tidak rentan terhadap serangan ekstensi panjang, seperti SHA-3;
**2. Gunakan HMAC: **HMAC memerlukan kunci dan pesan sebagai masukan, dan hasil keluaran bergantung pada kunci dan pesan, sehingga penyerang tidak dapat melakukan serangan ekstensi panjang tanpa mengetahui kuncinya;
**3. Memperkuat verifikasi otoritas: **Tambahkan langkah verifikasi otoritas tambahan di sisi server, seperti menggunakan autentikasi multifaktor.
Berikut ini adalah ciri-ciri dari beberapa algoritma Hash yang umum digunakan:
Pertahanan yang efektif terhadap serangan ekstensi panjang adalah dengan menggunakan fungsi hash yang kebal terhadap serangan tersebut, seperti SHA-3 dan BLAKE2. Selain itu, juga dapat dilindungi melalui struktur HMAC (kode otentikasi pesan hash yang dikunci). Langkah-langkah ini dapat secara efektif meningkatkan keamanan sistem, memastikan integritas data dan stabilitas aplikasi.
Tautan referensi:
[1]
[2]
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Bahaya tersembunyi dari fungsi hash: serangan ekstensi panjang dan risiko keamanan sisi server
Perkenalan
Serangan Ekstensi Panjang adalah serangan yang terkait dengan properti jenis fungsi hash tertentu seperti MD5, SHA-1, dan SHA-2. Sederhananya, serangan ini mengeksploitasi fakta bahwa dengan mengetahui H(pesan) dan panjang pesan, kita dapat dengan mudah menghitung H(message || padding || extension) tanpa mengetahui pesan itu sendiri. Diantaranya, "||" berarti koneksi, dan "padding" ditambahkan sesuai dengan ketentuan fungsi hash.
Hal ini karena fungsi hash ini menggunakan struktur Merkle-Damgård, yang membagi input menjadi beberapa blok, dan hash setiap blok bergantung pada hash dari blok sebelumnya. Ini berarti bahwa setelah kita menghitung hash dari pesan tertentu, kita memiliki keadaan di mana kita dapat memulai dan menambahkan lebih banyak blok.
Mode verifikasi sisi server
Untuk memudahkan deskripsi skenario kerentanan, pertama-tama kita berasumsi bahwa ada mode otentikasi sisi server, yaitu, ketika pengguna mencoba masuk, server akan meneruskan hash tertentu berdasarkan ID pengguna, nama, dan a Kunci 30-bit hanya diketahui oleh server. Algoritme menghasilkan nilai hash dan mengirimkannya ke klien. Selanjutnya, ketika klien mencoba mengakses antarmuka tertentu, seperti antarmuka untuk mengubah izin pengguna, server akan membuat ulang hash untuk verifikasi berdasarkan ID peran, nama peran, izin peran, dan kunci front-end 30-bit yang sama. akhir POSTING. Jika hash yang diunggah konsisten dengan hash yang dihasilkan oleh server, verifikasi dianggap berhasil, dan izin peran baru ditulis ke database.
Untuk memudahkan pemahaman, berikut beberapa kode sederhana yang ditulis sesuai uraian sebagai contoh:
Berpikir melampaui otoritas
Karena celah dalam mode verifikasi, penyerang dapat melewati verifikasi izin dengan merekonstruksi permintaan transaksi tanpa mengetahui SecretKey. Ide inti dari serangan tidak sah adalah untuk mengeksploitasi karakteristik serangan ekspansi panjang. Penyerang pertama-tama perlu mendapatkan nilai hash asli dan menghitung panjang data asli melalui algoritma iteratif sederhana. Setelah informasi ini diperoleh, parameter tambahan yang tidak sah dapat ditambahkan ke data asli dan algoritma hashing yang sama dapat digunakan untuk menghasilkan hash berbahaya.
Prinsip serangan ekstensi panjang
Serangan Ekstensi Panjang terjadi karena mekanisme internal beberapa fungsi hash. Fungsi-fungsi ini pertama-tama membagi data menjadi potongan-potongan dengan panjang tetap sebelum memproses data masukan, dan kemudian mengisinya di akhir setiap potongan untuk memenuhi persyaratan tertentu. Desain ini memungkinkan penyerang untuk membangun nilai hash baru yang efektif dengan menambahkan dan menambahkan data baru sambil mengetahui nilai hash dan panjang pesan asli.
Ambil SHA-256 sebagai contoh, yang bekerja pada blok 512-bit. Untuk data yang panjangnya bukan kelipatan 512 bit, diperlukan padding. Aturan pengisiannya adalah sebagai berikut:
Tambahkan bit "1" di akhir data;
Tambahkan sejumlah bit "0" tertentu sehingga panjang data modulo 512 sama dengan 448 (untuk lebih jelasnya lihat [1] );
Tambahkan blok sepanjang 64-bit di bagian akhir untuk mewakili panjang data asli.
Singkatnya, "1" diikuti oleh m "0", ditambah bilangan bulat 64-bit atau 128-bit, ditambahkan ke akhir pesan untuk menghasilkan pesan padding dengan panjang 512*n. Bilangan bulat yang ditambahkan adalah panjang pesan asli. Pesan padding kemudian diproses oleh fungsi hash menjadi n blok 512-bit.
Metode konstruksi
Dalam contoh ini, kita akan menggunakan kode yang disebutkan dalam gambar di atas sebagai skenario spesifik, dengan string datanya adalah data="user_id=1&user_name=aa" dan kuncinya adalah SecretKey="Length_extension\ _attact\ _rahasia". Server akan mengurai bidang data dalam data yang diunggah dan mengurai parameter yang diperlukan user_id dan user_name melalui pembatas &. Jika bidang peran ada, server juga akan memperoleh nilai bidang ini. Server kemudian melakukan hashing pada semua kolom dengan SecretKey dan membandingkannya dengan hash verifikasi yang diunggah. Jika nilai hash konsisten, parameter dianggap mematuhi aturan dan langsung digunakan.
Pertama, kita masuk ke antarmuka loginHandler untuk mendapatkan nilai hash hash="37d310d3465506486431fb2c2eb163f0f470479703f66dc9e5fdead8a3390c68" yang dihasilkan menggunakan SHA-256 berdasarkan data dan SecretKey.
Selanjutnya, kita akan membahas betapa sulitnya memecahkannya. Mengambil contoh situasi pengujian kami, sesuai dengan prinsip serangan ekstensi panjang, selama kami mengetahui H (pesan) dan panjang pesan, kami dapat menambahkan data baru melalui serangan ekstensi panjang. Pesan asli = SecretKey + data, sekarang kita punya H(pesan), kita hanya perlu mengetahui panjang pesan untuk membuat nilai hash baru. Karena SecretKey adalah kunci 30-bit, panjang pesan sebenarnya dapat diketahui hanya setelah 30 iterasi. Oleh karena itu, kita dapat dengan mudah membuat nilai hash baru. Karena kita perlu menggunakan izin admin, kita perlu menyambungkan bidang berbahaya "&role=admin" ke dalam data asli.
Kita dapat memanfaatkan fitur serangan ekstensi panjang untuk menambahkan data baru dan menghasilkan nilai hash baru tanpa mengetahui SecretKey. Perpustakaan yang sudah mengimplementasikan fungsi ini digunakan di sini [2] untuk menyelesaikan tes. Kemudian gunakan alat tersebut untuk menghasilkan nilai hash baru.
Karena verifikasi antarmuka adminActionHandler memverifikasi hash berdasarkan user_id, user_name dan peran yang diunggah, data yang kami unggah saat ini adalah user_id=1, user_name=aa\x80\x00\x00\x00 \ x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x70 dan role=admin, seperti terlihat pada gambar di bawah ini:
Nilai hashnya adalah 84ae4ae437eeabf3bd8a26294392770b86f64a81998194156ac003d58a21acd0. Kemudian Anda dapat memanggil antarmuka adminActionHandler Setelah menerima data, server akan membandingkan hash yang diunggah dengan sha256 (SecretKey + fakeData), dan melakukan beberapa operasi sensitif setelah melewati verifikasi. Dengan cara ini, kami berhasil melewati verifikasi sisi server dengan menggunakan serangan ekstensi panjang, dan menyadari operasi yang tidak sah.
Skenario serangan lainnya yang mungkin terjadi
1. Verifikasi Integritas File: Jika integritas file diverifikasi dengan menggabungkan kunci dan konten file, lalu melakukan hashing, maka penyerang dapat memperluas file dan menghasilkan hash yang valid, sehingga melewati pemeriksaan integritas ;
**2. Keamanan aplikasi web: **Dalam aplikasi web, jika fungsi hash yang rentan terhadap serangan ekstensi panjang digunakan untuk memverifikasi data yang dikirimkan oleh pengguna, penyerang dapat memanfaatkannya untuk mengirimkan data berbahaya;
3. Tanda tangan digital: Dalam beberapa skema tanda tangan digital, jika tanda tangan dihasilkan dengan menggabungkan kunci pribadi dan pesan lalu melakukan hashing, maka penyerang dapat memperluas pesan dan menghasilkan tanda tangan yang valid;
**4. Penyimpanan Kata Sandi: **Meskipun jarang terjadi, jika kata sandi disimpan dengan menggabungkan kunci (seperti garam) dan kata sandi, lalu melakukan hashing, penyerang mungkin mencoba memecahkannya menggunakan kata sandi serangan ekstensi panjang.
Cara mencegahnya
1. Pilih fungsi hash yang tidak rentan terhadap serangan ekstensi panjang, seperti SHA-3;
**2. Gunakan HMAC: **HMAC memerlukan kunci dan pesan sebagai masukan, dan hasil keluaran bergantung pada kunci dan pesan, sehingga penyerang tidak dapat melakukan serangan ekstensi panjang tanpa mengetahui kuncinya;
**3. Memperkuat verifikasi otoritas: **Tambahkan langkah verifikasi otoritas tambahan di sisi server, seperti menggunakan autentikasi multifaktor.
Berikut ini adalah ciri-ciri dari beberapa algoritma Hash yang umum digunakan:
| Algoritma | Resistensi Tabrakan | Serangan Tabrakan Awalan yang Dipilih | Resistensi Preimage | Serangan Ekstensi Panjang | | --- | --- | --- | --- | --- | | MD5 | 2^18 | 2^39 | 2^123.4 | Rentan | | SHA-1 | 2^61.2 | 2^63.4 | 2^160 | Rentan| | SHA-256 (SHA-2) | 2^65,5 | - | 2^254,9 | Rentan| | SHA-512 (SHA-2) | 2^32.5 | - | 2^511.5 | Rentan| | SHA-3 | 2^50 | - | Tidak diketahui | Tidak rentan | | BLAKE2s | 2^112 | - | 2^241 | Tidak rentan | | BLAKE2b | 2^224 | - | 2^481 | tidak rentan|
Kesimpulan
Pertahanan yang efektif terhadap serangan ekstensi panjang adalah dengan menggunakan fungsi hash yang kebal terhadap serangan tersebut, seperti SHA-3 dan BLAKE2. Selain itu, juga dapat dilindungi melalui struktur HMAC (kode otentikasi pesan hash yang dikunci). Langkah-langkah ini dapat secara efektif meningkatkan keamanan sistem, memastikan integritas data dan stabilitas aplikasi.
Tautan referensi:
[1]
[2]