Bagaimana kata sandi disimpan di mysql?

Let’s say an attacker manages to retrieve a database from a Web application and extracts from it the couple .

LoginPasswordadminazertytotomatrixbillyyep59f$4txwrrtatamatrixtitifreepassattackertesPwndPassword

Dalam hal ini, penyerang secara langsung memiliki kata sandi semua pengguna dalam teks biasa. Bahkan Billy yang memiliki password yang kuat pun tidak terlindungi

Menyimpan kata sandi dalam teks biasa BUKAN solusi yang aman. Tidak seorang pun, termasuk administrator situs web/database, harus memiliki akses ke kata sandi teks biasa pengguna

Kata sandi terenkripsi

Dalam beberapa kasus, kata sandi disimpan dalam database setelah dienkripsi oleh algoritme yang dapat dibalik (rot13, enkripsi topeng…). Karena algoritme dapat dibalik, algoritme tersebut tidak mematuhi aturan CNIL (Komisi Nasional Prancis untuk Informatika dan Kebebasan).  

Memang, ini merekomendasikan agar kata sandi apa pun diubah oleh fungsi kriptografi yang tidak dapat dibalik. (sumber dalam bahasa Prancis)

Karena penyerang mengetahui kata sandinya dalam bentuk teks biasa/terenkripsi, dia dapat menebak logika enkripsi dan mencoba membalikkannya. Jika dia berhasil, semua kata sandi akan diambil secepat teks biasa, terlepas dari kerumitan algoritme

Fungsi Hash Usang

Dalam banyak kasus, kata sandi disimpan dengan fungsi kriptografi lama yang tidak dapat diubah (md5, sha1…). Misalnya, situs LinkedIn dulu menyimpan sebagian kata sandinya dengan sha1, dan setelah hash bocor pada 2012, hanya butuh tiga hari untuk memulihkan 90% kata sandi. (sumber dalam bahasa Prancis)

Mari kita ambil database berikut (kata sandinya sama dengan sebelumnya)

LoginPassword (md5)adminab4f63f9ac65152575886860dde480a1toto21b72c0b7adc5c7b4a50ffcb90d92dd6billy47ad898a379c3dad10b4812eba843601tata21b72c0b7adc5c7b4a50ffcb90d92dd6titi5b9a8069d33fe9812dc8310ebff0a315

Untuk memperhatikan

  • Dalam kasus kami, semua kata sandi (kecuali milik Billy) adalah kata sandi yang sangat sering digunakan dan termasuk kata sandi yang paling banyak digunakan (misalnya dalam daftar 10 juta kata sandi-top-1000). txt)
  • Menarik juga untuk dicatat bahwa karena hash tidak memiliki gagasan tentang keacakan, toto dan tata berbagi hash yang sama, karena mereka memiliki kata sandi yang sama.

Pencarian sederhana dari hash admin di internet memungkinkan untuk secara langsung mengambil kata sandi mereka

Kecuali untuk pengguna Billy yang memiliki kata sandi rumit, dimungkinkan untuk mengambil semua hash secara langsung dengan kueri di mesin pencari

Jika hash tidak ditemukan langsung di mesin pencari, penyerang memiliki metode lain

Paksaan

Brute force adalah tindakan mencoba semua kemungkinan secara iteratif mengikuti aturan generasi. Ini seperti ketika kita mencoba membuka gembok dengan mendaftar semua kemungkinan dari 0000 hingga 9999 hingga gembok terbuka.  

Kamus

Serangan kamus adalah serangan di mana Anda mencoba semua istilah dalam daftar kata. Beberapa jenis kamus dapat dibayangkan

  • Kamus bahasa
  • Peringkat kata sandi yang paling banyak digunakan
  • Daftar yang disesuaikan dengan konteks tertentu

Jika kita mengambil gambar gembok, kita dapat membayangkan daftar yang dikontekstualisasikan seperti ini.   

Kita tahu bahwa gembok itu milik "Tutu", bahwa dia menyukai angka 42, dan dia lahir pada tanggal 26 November 2001. Jadi kita dapat berasumsi bahwa gembok mungkin berisi angka 42, 26, 11 dan 01 dan dengan demikian menghasilkan daftar sesuai dengan kriteria ini.  

Catatan. Dengan penyalahgunaan bahasa, adalah umum untuk menyebut serangan kamus sebagai serangan brute force.  

Meja pelangi

Tabel pelangi adalah subjek yang layak mendapat artikel tersendiri. Dengan cepat, ini adalah struktur data yang memungkinkan pengambilan kata sandi dengan kompromi penyimpanan/waktu yang baik. Struktur ini memiliki daftar hash yang telah dihitung sebelumnya dan memungkinkan untuk mengambil hash dalam waktu yang dapat diterima.  
Banyak tabel pelangi tersedia secara online

Tolok Ukur untuk Mengambil Kata Sandi Md5

Tolok ukur dilakukan pada database dengan daftar rockyou yang berisi 14.341.564 kata sandi unik. Benchmark dilakukan pada mesin virtual, yang tidak optimal untuk memecahkan kata sandi

Melihat hasilnya, kami melihat bahwa kecuali kata sandi Billy, yang tidak ada dalam daftar rockyou, ketiga kata sandi telah ditemukan dan hanya 11 detik yang diperlukan perangkat lunak untuk menghitung semua hash yang ada di rockyou

Fungsi hash yang tidak tepat

Setelah melihat contoh buruk sebelumnya, tergoda untuk menggunakan fungsi aman yang tidak dapat diubah seperti sha256, sha512, atau sha3. Namun, tujuan dari fungsi ini digunakan untuk menghitung ringkasan kriptografi untuk memeriksa integritas file, untuk membuat tanda tangan elektronik, atau untuk mengoptimalkan pencarian dan pengindeksan. Mereka tidak cocok untuk menyimpan kata sandi, karena cepat dihitung, seperti yang dibuktikan oleh tolok ukur berikut

LoginPassword (sha512)admindf6b9fb15cfdbb7527be5a8a6e39f39e572c8ddb943fbc79a943438e9d3d85ebfc2ccf9e0eccd9346026c0b6876e0e01556fe56f135582c05fbdbb505d46755atoto11a25e88658143a853d280bf77f81ff391347aaba2db54a3aab0149b265276de419880762a473fc496388bcf70566d7cfd0346c34add40652f8f7b669caf9ec0billyfe9cb9b07725fd1cc3906232405119fedf9a020436630d3c1e0f632f73909e6ed9e731c149ac22743bbe9541881f35ceebf1d2782d469eb3b42968469d55a7a4tata11a25e88658143a853d280bf77f81ff391347aaba2db54a3aab0149b265276de419880762a473fc496388bcf70566d7cfd0346c34add40652f8f7b669caf9ec0titif767036acd951f5ddaf4eed5291c677db060055806dbcae69ca35d95847559dc8abce5011fd2b50833e760eca2d84d6daf1f078200f42b4fc10b58bad3761c88

Di sini sekali lagi, kecuali untuk pengguna Billy, semua kata sandi telah diambil dan hanya diperlukan 16 detik bagi hashcat untuk menyelesaikan operasinya

Meningkatkan SHA512

Meskipun telah dikatakan sebelumnya bahwa fungsi SHA512 tidak dioptimalkan untuk penyimpanan kata sandi, mungkin menarik untuk menunjukkan cara mengoptimalkannya untuk memahami kepentingan fungsi hash yang sesuai untuk kata sandi

Penggunaan Garam

Garam adalah polutan untuk data mentah (di sini kata sandinya) yang memungkinkan menghasilkan dua hash berbeda dari data yang sama. Garam itu unik untuk setiap pengguna dan terdiri dari urutan acak. Ini meningkatkan kemungkinan kata sandi unik dan karena itu kemungkinan hash tidak pernah digunakan.  
Misalnya, dengan garam, toto dan tata tidak akan memiliki hash yang sama di database

Manfaat garam sangat banyak

  1. Hampir tidak mungkin menemukan hash langsung di internet jika diasinkan. Namun, garamnya harus cukup panjang dan acak
  2. Tabel pelangi tidak berfungsi dengan hash asin
  3. Seperti yang dikatakan sebelumnya, dua pengguna dengan kata sandi yang sama tidak akan memiliki hash yang sama jika garam digunakan. Perangkat lunak peretas kata sandi (hashcat, Johntheripper…), setelah memecahkan hash, lihat apakah itu tidak ada untuk pengguna lain. Oleh karena itu, tanpa garam, setelah ditemukan kata sandi toto, kata sandi tata langsung ditemukan. Namun, dengan garam, perangkat lunak harus dimulai lagi dari awal untuk setiap pengguna.  

Patokan dengan garam

UserSaltHash sha512 with saltadminBGdd6d6^ZgvkMhKf@W3RqT7509d123bce1aa92331861cf8fd738a58205045123f0e25f0862477cb19d3ee0757cd99865c30b123ad1e7f1be1e31a6058090458cb9941031f5c36683c8446etotoHZBD^@gL*wvoExo6yJ7hVB6b28830776de6ad7ef1dd8c221e0d53fec4532c623075d0216d937ab82ab284a56a461ce5d4ec77d1783665a262a6a1eb98627b1f6260da55dbb782d7cb75bc4billywvVndjwcZJy. dwT4fBD@U^2847b2605f6a1cd88399e6c9784c0e583799be9485cb128fe5f541f43636559067ec32de33e9b3fa2c15b15eec294cf262fd7aab2395dd64d6dbd9640b4fe6fdtataQeNWm9NXqJ8m@m2^F7Kh9*165bc06b69fa2bfcd893bfde86358394406c87c7f7abba891cd10ed9fac887c54d52ed14310ad675078033e9bca80084d345fb2836933e55c60f734982430e2btitiiQUemgw9M6Gw*&v6RG%MZ#f8eded6c815c7522ab6197aa319d3ff4cddc2c7eeffa0f91c1291603f807a47f320324d2ce2fed1fb3cbfe19524fc5d9c105093f755d76a949efb212fb85c942

Dengan konfigurasi ini, perangkat lunak hashcat memerlukan waktu 33 detik untuk memulihkan kata sandi. Tak satu pun dari hash dalam database diindeks oleh mesin pencari

Penggunaan Lada

Lada juga merupakan polutan, tetapi umum untuk semua pengguna. Itu tidak disimpan dalam database, tetapi dalam sumber aplikasi, dalam file konfigurasi atau dalam variabel lingkungan. Penyerang yang "baru" memahami database harus menebak lada atau mengambilnya dengan cara lain agar dapat memecahkan hash secara efektif

Meningkatkan Jumlah Iterasi

Cara lain untuk meningkatkan keamanan adalah dengan mengulang jumlah iterasi hash. Meningkatkan jumlah iterasi berarti kita akan melakukan hash kata sandi beberapa kali. Misalnya, dengan sha512 kita memiliki loop berikut

As long as iteration is greater than 0
hash = sha512(hash)
Decrement iteration

Untuk pengguna yang login, perhitungan hash akan lebih lama (masih butuh milidetik). Tetapi jika pengguna kehilangan beberapa milidetik untuk masuk, penyerang akan kehilangan lebih banyak waktu, karena penyerang akan kehilangan beberapa milidetik per percobaan, dan karena penyerang melakukan jutaan percobaan, ini akan menghasilkan jam/hari tambahan untuk mengambil kata sandi

Menggabungkan 3 Metode

Kami dapat menggabungkan tiga metode (garam, merica, dan jumlah iterasi) untuk memiliki satu metode untuk menyimpan kata sandi lebih aman daripada hash sederhana

Function calculation_hash(password,salt,pepper,iteration)
Inputs
password is the user's password in plain text
salt is the unique salt per user and is randomly generated
pepper is the common pepper for all users and is randomly generated.
iteration is the number of iterations

Output:
The password hash
Hash = sha512(salt+password+pepper)
As long as iteration is greater than 0
hash = sha512(hash)
Decrement iteration

return hash_

Kemudian, untuk memeriksa kata sandi saat masuk, panggil saja fungsi yang sama dengan kata sandi yang dimasukkan oleh pengguna dan bandingkan dengan hash di database. Jika keduanya identik, maka login berhasil

Menggunakan Fungsi Tertentu

Sebelumnya, kami berhasil membuat algoritme penghasil hash yang lebih tahan terhadap perangkat lunak pembobol kata sandi. Namun, fungsi sudah ada dan terbukti efektif dari waktu ke waktu. Oleh karena itu, tidak ada gunanya menemukan kembali roda dan berisiko menyebabkan kesalahan. Di antara berbagai fungsi ini, kita dapat menemukan. Argon2, scrypt, PBKDF2, bcrypt…

Fungsi-fungsi ini memiliki banyak kekuatan

  • Lebih lambat menghitung
  • Lebih intensif RAM (yang merupakan titik lemah GPU)
  • Mendefinisikan jumlah iterasi dari fungsi kriptografi yang digunakan. Seperti yang terlihat sebelumnya, semakin banyak iterasi, semakin mahal perhitungannya

Bcrypt

bcrypt adalah fungsi hash yang dibuat oleh Niels Provos dan David Mazières. Ini didasarkan pada algoritma enkripsi Blowfish dan dipresentasikan di USENIX pada tahun 1999.  

Di antara poin-poin positif selain yang disebutkan di atas kami menemukan implementasi dalam banyak bahasa. Selain itu, sejak algoritme ini berasal dari tahun 1999, algoritme ini telah menunjukkan ketahanannya dari waktu ke waktu, di mana beberapa algoritme seperti Argon2(i) hanya ada sejak 2015

Hash yang dihitung oleh bcrypt memiliki bentuk yang telah ditentukan sebelumnya

$2y$11$SXAXZyioy60hbnymeoJ9. ulscXwUFMhbvLaTxAt729tGusw. 5AG4C

  1. Algoritma. Yang ini dapat mengambil beberapa versi tergantung pada versi bcrypt ($2$, $2a$, $2x$, $2y$ dan $2b$)
  2. Biaya. Jumlah iterasi dalam pangkat 2. Misal disini, iterasinya adalah 11, algoritme akan melakukan 211 iterasi (2048 iterasi)
  3. Garam. Alih-alih menyimpan garam di kolom khusus, garam langsung disimpan di hash akhir
  4. Kata sandi hash

Karena bcrypt menyimpan jumlah iterasi, ini menjadikannya fungsi adaptif, karena jumlah iterasi dapat ditingkatkan dan oleh karena itu semakin lama semakin lama. Hal ini memungkinkannya, terlepas dari usianya dan evolusi daya komputasinya, untuk tetap kuat melawan serangan brute force. Tolok ukur berikut menunjukkan bahwa dibutuhkan 23 hari bagi hashcat untuk menghitung totalitas hash rockyou

Sangat menarik untuk dicatat bahwa kata sandi azerty dan matriks, kata sandi yang sangat lemah dan ada di bagian atas daftar, ditemukan dalam waktu singkat (2 jam) perangkat lunak bekerja dalam contoh

Kesimpulan

Kita telah melihat di artikel ini kegunaan fungsi hash yang kuat dan keuntungan menggunakan fungsi yang sudah ada. Selain itu, masalah penyimpanan kata sandi memiliki masalah hukum selain masalah keamanan

Akhirnya, menarik untuk dicatat bahwa dalam semua kasus kata sandi azerty dan matrix ditemukan dengan cepat, sedangkan kata sandi yep59f$4txwrr tidak pernah ditemukan. Memang, karena yang ini tidak ada dalam daftar apa pun, satu-satunya cara untuk menemukannya adalah dengan melakukan kekerasan menyeluruh pada 13 karakter, yang merupakan operasi yang sangat memakan waktu (karena banyaknya kemungkinan kata sandi). Ini juga menunjukkan betapa pentingnya bagi aplikasi web untuk memaksakan kebijakan kata sandi yang kuat.  

Di mana kata sandi root MySQL disimpan?

Terakhir, Anda perlu memperbarui kata sandi root MySQL di file /etc/mysql/my. cnf (seperti yang ditunjukkan pada Pic2) atau Anda mungkin tidak dapat menambahkan database atau pengguna baru.

Bagaimana kata sandi disimpan dalam database?

Menyimpan kata sandi teks biasa di database adalah dosa. Fungsi enkripsi menyediakan pemetaan satu-satu antara input dan output dan selalu dapat dibalik. Jika peretas mendapatkan kuncinya, dia akan dapat mendekripsi kata sandi. Cara yang lebih baik adalah dengan menggunakan fungsi hash kriptografi satu arah .

Bagaimana cara menyimpan detail login di database MySQL?

Untuk menyimpan username dan password dengan aman di database MySQL, kita bisa menggunakan MD5() . Mari kita lihat sebuah contoh. Pertama, kita akan membuat tabel. Perintah CREATE digunakan untuk membuat tabel.

Di mana MySQL menyimpan informasi pengguna?

MySQL menyimpan akun di tabel pengguna database sistem mysql . Akun didefinisikan dalam istilah nama pengguna dan host klien atau host dari mana pengguna dapat terhubung ke server.

Postingan terbaru

LIHAT SEMUA