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