###################################################################### Luigi Auriemma Applicazioni: Edonkey2000 (http://www.edonkey2000.com) Overnet (http://www.overnet.com) Versioni: 0.45 e versioni precedenti (solo la versione con GUI) Piattaforme: Windows Bug: I programmi mostrano una nuova finestra per ogni messaggio chat che arriva, ed ognuno di questi messaggi consuma risorse del sistema Date: 21 Mar 2003 Autore: Luigi Auriemma e-mail: aluigi@autistici.org web: aluigi.org ###################################################################### 1) Introduzione 2) Bug 3) Il Codice 4) Fix 5) Filosofia ###################################################################### =============== 1) Introduzione =============== Edonkey2000 e Overnet sono la stessa applicazione peer2peer e sono entrambi di tipo shareware. Questi programmi p2p usano un protocollo, creato dagli stessi programmatori, che e' chiamato protocollo Edonkey e molte persone usano tali programmi ed i loro cloni (come Emule, MlDonkey ed altri) per condividere files. Il bug che voglio mostrare e' un classico problema dei programmi p2p che appare quando un attacker vuole abusare della funzione di chat di questo tipo di programmi in modo da consumare tutte le risorse della macchina remota. ###################################################################### ====== 2) Bug ====== Il bug e' relativamente semplice. Molti programmi p2p (probabilmente tutti) permettono alle persone di chattare assieme oltre che condividere files. In Edonkey (e naturalmente Overnet) ogni utente puo' inviare un messaggio ad un altro utente semplicemente connettendosi a lui e, dopo i dati di identificazione, inviare i dati del messaggio: u_char Edonkey header = 0xe3 u_long message size u_char type of data = 0x4e for messages u_short message length u_char *message Ora quando Edonkey riceve il messaggio iniziera' a cercare tra le finestre di dialogo dei messaggi aperte al momento se ce n'e' qualcuna dello stesso utente. La ricerca di tale finestra non verra' fatta tramite il nickname ma il programma usera' la stringa hash che ogni utente deve inviare alla connessione per identificarsi. Come molti sanno, ogni finestra di dialogo ruba risorse al sistema Windows (memoria innanzitutto e CPU dopo molte finestre), quindi far apparire un sacco di finestre e' la stessa cosa che aprire le finestre di Explorer tanto per fare un esempio. Bene, ora il bug e' abbastanza chiaro. Un utente che effettua numerose connessioni sequenziali allo stesso client Edonkey ed invia un hash differente per ogni messaggio fara' aprire un gran numero di finestre di dialogo nell'host Edonkey remoto. E cio' continuera' finche' non ci saranno piu' risorse disponibili per allocare nuove finestre. Il consumo di risorse non e' un DoS da sottovalutare in quanto dopo alcune di queste finestre di dialogo sara' impossibile aprire nuove finestre o programmi, e si puo' facilmente immaginare cosa cio' possa significare se si fa' andare un gioco o un applicazione specifica che richiede molta CPU e memoria. Se si e' di fronte al monitor si puo' usare CTRL-ALT-CANC per killare l'applicazione Edonkey, ma se non si sta' utilizzando il computer si avra' un brutta sorpresa al ritorno 8-) Il mio Pentium II a 448 Mhz con all'incirca 500 Mb di RAM diventa inutilizzabile dopo circa 500 finestre di dialogo di questi messaggi (in pratica e' impossibile eseguire qualsiasi applicazione). ###################################################################### ============ 3) Il Codice ============ Ho rilasciato un semplice proof-of-concept per Windows e *nix che invia infiniti messaggi, od un numero scelto dall'utente, alla vittima: http://aluigi.org/poc/eddos.zip ###################################################################### ====== 4) Fix ====== La versione 0.46 di Edonkey ed Overnet risolve il problema limitando il numero di finestre di messaggio visualizzabili. ######################################################################