it-swarm-id.com

Bagaimana cracker dapat merekonstruksi 200 ribu hash password asin begitu cepat?

Saya sedang meneliti untuk sebuah pembicaraan kecil tentang keamanan web dan saya menemukan satu artikel tentang hack formspring, yang membuat saya penasaran. Mereka mengklaim telah menggunakan SHA-256 + garam

Kami dapat segera memperbaiki lubang dan meningkatkan mekanisme hashing kami dari sha-256 dengan garam acak menjadi bcrypt untuk memperkuat keamanan (10 Juli 2012)

... namun demikian para penyerang mengklaim mereka telah menemukan ~ 200 ribu kata sandi dalam set data 400k yang diterbitkan (Mereka memiliki 11 juta pengguna, kemungkinan IMHO bahwa kebanyakan dari mereka telah disalin).

Sekitar setengah dari 400.000 hash telah direkonstruksi oleh cracker kata sandi. (11 Juli 2012)

Ini terlihat mencurigakan bagi saya. Saya tahu bahwa tanpa menggunakan PKCS # 5 atau teknik serupa, keamanan SHA-256 terbatas, tetapi seberapa besar daya kalkulasi yang mereka perlukan untuk menemukan begitu banyak kata sandi dengan begitu cepat?

Dugaan saya adalah bahwa formspring berbohong tentang hashing. Adakah seseorang yang memiliki wawasan tentang hal itu?

33

Tidak ada jawaban yang ada yang mencakup bagian penting dari pertanyaan ini untuk kepuasan saya: bagaimana dengan garam?

Jika hanya nilai hash kata sandi yang diposting, cracker lain tidak mungkin tahu:

  1. Nilai garam per-kata sandi (seharusnya acak, per sumber).

  2. Bagaimana garam dicampur dengan kata sandi dalam kode.

Yang mereka miliki hanyalah hash final, yang menghasilkan!

Ada banyak cara kata sandi dan garam dapat digabungkan untuk membentuk hash:

sha256(pass + salt)
sha256(salt + pass)
sha256(sha256(pass) + sha256(salt))
sha256(pass + sha256(salt))
sha256(sha256(...(salt + pass + salt)...))

Tetapi jika garamnya adalah direkomendasikan 8 karakter dari keacakan murni ...

sha256("monkey1" + "w&[email protected]")
sha256("w&[email protected]" + "monkey1")

... ini berarti kata sandi "khas" 7 atau 8 karakter menjadi sangat sulit untuk diubah, karena secara efektif 15 karakter atau lebih! Selanjutnya, untuk memecahkan hash kata sandi yang Anda tahu asin, kecuali Anda juga punya garam, Anda tidak punya pilihan lain kecuali brute force !

Berdasarkan penelitian yang saya lakukan menggunakan cracking GP , saya mencapai 8213,6 Mc/s dengan menggunakan dua kartu ATI kelas atas, brute force cracking hash password MD5. Dalam pembandingan saya ini berarti saya bisa mencoba:

all 6 character password MD5s   47 seconds
all 7 character password MD5s   1 hour, 14 minutes
all 8 character password MD5s   ~465 days
all 9 character password MD5s   fuggedaboudit

Perhatikan bahwa SHA-256 adalah 13% dari kecepatan MD5 pada GPU menggunakan Hashcat . Jadi gandakan angka-angka ini dengan sekitar 8 untuk melihat berapa lama lagi.

Jika garamnya adalah tidak diketahui, itu berarti Anda pada dasarnya kasar memaksa setara dengan 12+ kata sandi karakter. Itu jauh melampaui ranah daya komputasi yang dikenal.

Sekarang jika Anda ingin berdebat bahwa ...

  1. The asli kerupuk juga memperoleh garam, tetapi memilih untuk tidak mempostingnya.

  2. The orisinal cracker juga memiliki kode sumber (atau open source) sehingga mereka tahu bagaimana kata sandi diasinkan, tetapi memilih untuk tidak memposting informasi itu.

  3. Formspring berbohong dan kata sandinya tidak asin atau asin sehingga garam tidak berpengaruh.

... maka ya, meretas 200 ribu dari 400 ribu kata sandi dalam beberapa hari adalah mudah.

34
Jeff Atwood

Edit: Semua hal di bawah ini mengasumsikan bahwa garam diketahui, karena itulah standar penggunaan industri garam Word (baris ke-3) .

Sama seperti contoh bagaimana ini sering terlihat dalam database, lihat ini SHA-256 Unix Crypt output:

$5$rounds=80000$wnsT7Yr92oJoP28r$cKhJImk5mfuSKV9b3mumNzlbstFUplKtQXXMo4G6Ep5

.. dimana wnsT7Yr92oJoP28r adalah garam dalam plaintext. The Python Dokumentasi Passlib memiliki deskripsi yang baik tentang banyak format kata sandi hash umum , dan sebagian besar dari garam plaintext store ini digabungkan bersama-sama dengan representasi kata sandi hash.

' tidak diketahui oleh penyerang garam' yang dibicarakan @Jeff Atwood sering disebut "lada". Lihat Kata sandi Hashing, tambahkan garam + lada atau cukup garam?


Pada tahun 2009 Daniel J. Bernstein menulis implementasi SHA-1 yang sangat dioptimalkan untuk kerangka kerja CUDA NVIDIA. Saat itu mereka berhasil 690 juta hash SHA-1 per detik pada satu server menggunakan empat kartu grafis.

Serangan brutal terhadap kata sandi hash adalah beban kerja "paralel memalukan" . Pada tahun 2010 Thomas Roth menunjukkan brute force menyerang ~ 10 hash untuk ~ 2 $ menggunakan Amazon EC2. Ini dapat dengan mudah ditingkatkan, jika nilainya tidak cukup tinggi, kemudian tambahkan lebih banyak instance EC2.

Jadi pada dasarnya ini bukan pertanyaan tentang berapa lama waktu yang dibutuhkan untuk menguatkan kata sandi. Ini lebih merupakan pertanyaan tentang seberapa besar daya komputasi yang bersedia atau mampu dibayar penyerang untuk mendapatkan hasil yang lebih cepat.

para penyerang mengklaim telah menemukan ~ 200.000 kata sandi

Satu penjelasan yang masuk akal adalah bahwa para penyerang tidak menargetkan representasi hash tertentu, mereka hanya pergi untuk "buah rendah tergantung". Dengan kata lain, mereka hanya mencari kata sandi yang 'mudah ditebak'. Mungkin sesuatu seperti:

  • Daftar kandidat kata sandi paling umum dalam plaintext, dibuat dari daftar kata sandi pengguna aktual yang dipublikasikan. (Selama bertahun-tahun telah ada beberapa kebocoran kata sandi pengguna sebenarnya .)
  • Dan mungkin mereka juga mencoba semua kata sandi huruf kecil yang dapat diucapkan hingga batas atas yang rendah, misalnya hingga 6 karakter. (Dalam data MySpace 2006 yang ditetapkan di atas, ditemukan bahwa 17% dari semua kata sandi pengguna akhir terdiri dari 6 karakter atau kurang.)

Dugaan saya adalah bahwa formspring berbohong tentang hashing.

Jika saya memahami tautan Anda dengan benar, maka hash ditemukan di sebuah forum pada tanggal 7 Juli. Tetapi mereka bisa dicuri dari Formspring beberapa minggu atau bulan sebelumnya?

Mengingat apa yang saya jelaskan di atas, tampaknya tidak masuk akal bagi saya bahwa satu putaran SHA256 dengan garam unik per kata sandi digunakan, seperti dikatakan Formspring.

Itu semua tergantung pada berapa banyak waktu dan upaya penyerang dimasukkan ke dalam brute force cracking. Tetapi dalam sumber daya yang mungkin dimiliki sekelompok kecil peretas, tampaknya masuk akal untuk menemukan 200.000 kata sandi yang lemah dari kumpulan data 11 juta representasi hash sederhana SHA-256.

16
Jesper M

Memecahkan hash yang tidak tawar cukup sederhana: Anda hanya mencari hash di tabel yang sudah dihitung sebelumnya dan menemukan jawaban Anda. Tidak masuk akal memaksa sisanya karena tabel Rainbow Anda sudah mencakup kamus brute-force Anda.

Tapi cracking password asin masih sederhana; lebih lambat tapi masih sederhana. Dalam sebagian besar serangan brute-force, penyerang tidak memiliki kedalaman. Daripada mencoba 1 miliar kata sandi terhadap 1 akun, ia mencoba puluhan atau ratusan atau ribuan kata sandi umum terhadap SEMUA akun. Tentu saja tabel Rainbow lebih cepat, tetapi garam saja tidak menghalangi metodologi brute-force klasik. Mulailah dari bagian atas kamus Anda dan coba kata sandi itu untuk semua akun: ini jelas melibatkan penghitungan ulang hash untuk setiap akun, tetapi di sisi lain, peluang Anda untuk mendapatkan hit cukup tinggi (itulah yang dimaksud dengan "kata sandi umum" , pokoknya). Selanjutnya, ambil kata sandi Anda yang paling umum berikutnya, lalu yang berikutnya, dll.

Pada akhirnya, Anda hanya dapat melewati beberapa ribu kata sandi, tetapi secara statistik, mungkin ada ratusan akun dengan kata sandi "123456" di daftar Anda, dan sejumlah besar yang menggunakan "kata sandi1" dan "111111" dan "uji" .

200 ribu dari 11 juta bisa dipercaya; hanya sekitar 2%. 200K dari 400K kurang begitu. Bukan tidak mungkin tetapi tidak mungkin. Hukum pengembalian yang semakin berkurang menendang di sana di suatu tempat; Saya tidak yakin seberapa jauh tetapi mungkin rasio yang sangat sederhana seperti 1/e atau sesuatu. Di luar itu saya merasa skeptis.

8
tylerl

Itu masuk akal bahwa mereka tidak berbohong.

  1. Seperti @ Jeff mencatat bahwa akses ke garam sangat penting untuk cracking cepat, tetapi seperti yang dicatat oleh @Remus Rusanu: "jika mereka mendapatkan hash maka sulit bagi saya untuk melihat bagaimana mungkin mereka tidak mendapatkan garam sebagai "karena mereka harus disimpan sedemikian rupa sehingga mereka dapat dikaitkan satu sama lain. Saya akan berasumsi bahwa: setidaknya peretas awal memiliki akses ke garam.1

  2. @ Jeff juga menyatakan bahwa mereka harus memiliki akses ke kode sumber untuk mengetahui bagaimana garam dan kata sandi digabungkan. Saya mengusulkan pendekatan berbeda untuk mencari tahu bagaimana garam dan kata sandi digabungkan:

    1. mari kita asumsikan bahwa mereka memiliki akun formspring sebelum serangan (asumsi yang cukup masuk akal)
    2. cari akun tertentu (garam, hash) dalam daftar yang diperoleh
    3. mengetahui kata sandi, garam dan hash yang dihasilkan, seharusnya mudah untuk membuat skrip kecil untuk menguji semua cara yang masuk akal (dan beberapa cara tidak masuk akal) untuk menggabungkan kata sandi dan garam (tidak lebih dari beberapa ribu cara?)
    4. ???
    5. keuntungan!
  3. mereka mengklaim memiliki "puluhan juta anggota" yang membuat @Jesper buah rendah tergantung teori terdengar sangat masuk akal.

Ok, mereka masih bisa berbohong tetapi setidaknya terdengar masuk akal bahwa mereka tidak berbohong.

1. Jika asumsi ini salah - peretas awal tidak mempublikasikan garam DAN tidak mencoba dan memecahkan kata sandi sendiri - sisanya mungkin tidak menjadi mungkin.

7
João Portela

hashcat dapat melakukan lebih dari 1 miliar hash SHA256 per detik pada Radeon HD7970, yang hanya setengah dari kecepatan SHA1 dan seperempat dari kecepatan MD5. Namun, ini bahkan bukan bottleneck :

Satu hal lagi sebelum kita melanjutkan; apakah Anda memperhatikan kecepatan retak itu "hanya" 258,7M per detik? Apa yang terjadi pada throughput teoretis dari beberapa miliar hash SHA1 per detik? Masalahnya adalah bahwa throughput yang lebih tinggi hanya dapat dicapai dengan "mutasi" dari nilai-nilai kamus kata sandi atau dengan bekerja melalui berbagai kemungkinan kata sandi secara langsung dalam GPU. Dengan kata lain, jika Anda membiarkan GPU mengambil nilai kamus, lalu mengubahnya menjadi sejumlah kemungkinan yang berbeda, itu dapat bekerja jauh lebih cepat. GPU tidak dapat diberi kata sandi dengan cukup cepat untuk mencapai tingkat throughput yang sama sehingga secara efektif memiliki daftar kata sandi menjadi hambatan.

Jadi menggunakan SHA256 (atau bahkan SHA512) tidak lebih aman daripada menggunakan SHA1 atau MD5 terhadap serangan semacam ini.

4
mgorven

Tidak ada posting yang menyebutkan apakah pelaku memperoleh akses ke kode sumber Formspring atau tidak. Jika ini masalahnya, metode konstruksi hash dan pembuatan garam secara acak akan tersedia bagi para penyerang. Ini akan membuat tugas cracking secara signifikan lebih mudah, terutama jika metode menghasilkan garam "acak" membatasi mereka ke nilai set yang relatif kecil.

Mengingat kecepatan yang terlihat saat perangkat terbatas ini retak, tebakan terbaik saya adalah bahwa inilah masalahnya.

3
mitchellrj

Jika mereka menggunakan hash dengan garam unik per kata sandi, maka biasanya butuh waktu yang cukup lama sebelum seseorang dapat memecahkan kata sandi ini. Kecuali kata sandinya sangat lemah atau kata sandinya adalah kata-kata dalam kamus. Bruteforcing murni tampaknya agak tidak mungkin jika mereka kuat.

Perangkat keras Tom memiliki artikel tentang kata sandi GPGP cracking. Kata sandi yang lemah ( tidak lebih dari 10 karakter termasuk huruf besar, huruf kecil, tanda, ...) dapat dipecahkan dalam hitungan menit, bahkan dengan garam jika garamnya diketahui.

Kalau tidak, itu akan memakan waktu berhari-hari, berbulan-bulan, lebih lama kata sandi bahkan ribuan tahun. Tapi ini tanpa garam. Dengan garam itu akan memakan waktu selamanya.

1
Lucas Kauffman