Random Number
Serangan yang umum adalah:
- Nilai random bisa diprediksi
- Nilai random bisa dibruteforce dengan cepat
- Nilai random ternyata tidak penting dalam program
Pseudo Random
Jika bilangan acak dihasilkan dengan fungsi rand, random dan sejenisnya, maka kemungkinan yang dipakai adalah PRNG (pseudo random number generator). Jika kita punya seednya maka kita bisa memprediksi angka berikutnya yang muncul. Jika aplikasi C memakai seed berupa time, maka tidak sulit menebaknya karena presisi time adalah detik (dalam satu hari hanya ada 86400 detik).
Algoritma PRNG
PRNG yang umum:
Mersenne Twister dipakai di PHP, Python, Visual C++, Excel, R, Ruby.
True Random
Jika ada program yang membaca /dev/random atau /dev/urandom sudah dipastikan hasilnya benar-benar random dan tidak bisa diprediksi. Tapi lihat juga poin berikutnya: apakah nilai ini diproses apa adanya atau diambil sebagian bitnya atau modulusnya saja.
Jika nilai dipakai seluruhnya, maka hampir bisa dipastikan attack-nya melalui hal lain, bukan dengan mengakali random number generator. Jika hasil pembacaan /dev/random atau /dev/urandom hanya dipakai sebagai seed, maka masih ada kemungkinan bisa diakali.
Key space
Tidak semua random sulit ditebak, contohnya jika ternyata ada modulus nilai kecil (rand() % 255), maka nilai 0-254 bisa dibruteforce dengan cepat (nilai sampai 16 bit masih bisa dibrute force dengan cepat).
Contoh soal
Museum of Fine Arts
Bruteforce seed
http://blog.rentjong.net/2015/03/boston-key-party-2015-museum-of-fine.html
HITBKul 2014 Daemon 4
Brute force seed
http://blog.rentjong.net/2014/10/hitbkul-2014-daemon-4.html
Copyright © 2009-2018 Yohanes Nugroho