2014-11-17 10 views
14

I strace 'd uno script semplice che usa perl e bash.perché perl, ruby ​​usa/dev/urandom

$ strace perl -e 'echo "test";' 2>&1 | grep 'random' 
open("/dev/urandom", O_RDONLY)   = 3 
$ strace bash 'echo "test"' 2>&1 | grep 'random' 
$ 

Perché perl bisogno del pseudorandom number generator per uno script così banale? Mi aspetterei di aprire /dev/urandom solo dopo il primo utilizzo di dati casuali.

Edit: python Ho anche provato e rubino

$ strace python -c 'print "test"' 2>&1 | grep random 
$ 
$ strace ruby -e 'print "test\n"' 2>&1 | grep random 
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_CLOEXEC) = 3 

Perché Perl e Ruby aprirlo con modalità diverse?

+1

Forse per seminare il proprio PRNG? –

+0

generare numeri casuali non è una cosa semplice./dev/random dà accesso ai dati "casuali" dalla macchina, quindi perl lo usa. In quale altro modo otterrete input casuali? Qual è il tuo problema con il modo in cui è fatto? Hai bisogno di numeri pseudo-casuali "migliori"? – bytepusher

+0

Ho provato lo stesso sul mio sistema. Legge solo 4 byte da/dev/urandom' e poi lo chiude. –

risposta

15

Prova a cercare "Denial of Service tramite Algorithmic Complexity Attacks".

In breve, se uno script Perl accetta input esterni (da un file, rete, ecc.) E memorizza tali dati in un hash, un utente malintenzionato che può influenzare i dati può sfruttare l'algoritmo di hash per deteriorare gli hash (O (1 ricerche) in elenchi concatenati (ricerche O (N)). Per difendersi da questo tipo di attacco, alcuni parametri dell'algoritmo di hashing sono randomizzati all'avvio del programma in modo che un utente malintenzionato non possa costruire una sequenza di chiavi hash che causerà un problema.

Questo ovviamente non è specifico per Perl. Qualsiasi programma che utilizza un algoritmo di hashing è potenzialmente vulnerabile a questo tipo di attacco.

+4

Inoltre, vale la pena notare che il motivo per cui questo viene eseguito all'avvio, anziché la prima volta che usi un hash in perl, è che gli hash sono usato internamente - per esempio nella tabella dei simboli. – harmic