Post by rob4youPost by Leonardo SerniMa sniffando MD5(CONCAT(challenge),MD5(password)), ci puoi fare il brodo,
dato che la challenge sara' di tipo unique e non sara' piu' usata.
E la challenge come me la conservo sul server ogni volta per fare il
matching con ciò che è inviato dal client? In sessione?
O la tieni in sessione, oppure la generi ogni volta diversa. Per esempio
puoi usare come challenge un altro MD5: secret piu' data(YmdHi). Data la
possibilita' che "scatti" il minuto, farai due o tre giri, partendo da 3
minuti prima:
$md5pass = SQLFetchValue("SELECT md5pass FROM users WHERE
user='$escape_user';");
$ok = false;
$serial = (int)(time() / 60) - 3;
for ($n = 0; $n < 4; $n++)
{
$challenge = MD5("$secret:" . ($serial + $n));
if ($_REQUEST['response'] == md5("$challenge:$md5pass"))
{
$ok = true;
break;
}
}
Un attaccante non puo' prevedere a priori la stringa $challenge dato che
non conosce $secret, e non gli serve a molto intercettarla, perche' dopo
cinque minuti non sara' piu' riconosciuta come valida. Fermo restando il
fatto che potrei usare $secret:$_SERVER[REMOTE_ADDR]:$serial, in modo da
legare il challenge anche all'indirizzo IP della controparte. Cosi', uno
che volesse forgiare una credenziale dovrebbe non solo intercettarmi una
connessione, ma riuscire ad effettuare un attacco man-in-the-middle (del
tipo: intercetta la connessione a livello di ADSL, e al momento buono mi
butta fuori.
Il trucco con la password in chiaro potrebbe fartelo il netadmin che per
esempio vuole farti un scherzo (!); per forgiare un'autenticazione cosi'
pero' bisogna che abbia predisposto tutto in anticipo... non e' qualcosa
come lanciare un felino 'ngrep "GET.*Authorization: Basic" port 80...'.
Se c'e' questo rischio, credo che SSL sia l'unica alternativa (oppure si
puo' provare con l'autenticazione Digest).
Leonardo
--
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?