============================================================================== =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- --------------------[ previous ]---[ index ]---[ next ]--------------------- ----------------------------------[ EGGDR0P ]--------------------------------- -----------------------------------[ JoKeR ]---------------------------------- Bella li', raga e io che ci sto a fare qua? Neanch'io lo so bene, in ogni caso vi tocca subirvi questo mio articolo (ke kulo). Bene comincio subito a dirvi che non si trattera' di un articolo riguardante h/p/c/v (aho leva il dito dal PgDn), ma visto che quasi tutti noi passiamo ore su IRC mi e' sembrato giusto parlavi un poco dei BOT. Mentre riscrivo questo pezzo decine di volte, sara' per il caldo, sara' che sono il cibo preferito delle zanzare, sono passato a fare un salto sulla rete a girovagare un poco fino a quando mi sono soffermato su un sito casuale (NO non si tratta di un sito porno) che mi ha fatto prima pensare e poi sorridere parecchio, il cui titolo cita: 'What is an IRC bot?' Il testo (tradotto) che segue dice piu' o meno cosi'.. "Un IRC bot e' un programma che risiede in un canale IRC e lo tiene aperto, ventiquattro ore al giorno. Il bot assomiglia ad un normale utente che partecipa nel canale, pero' normalmente rimane 'idle' fintanto che non viene chiamato ad eseguire una funzione particolare. Un bot contribuisce in maniera considerevole alla stabilita' del canale, proteggendo da takeovers e da abusi, e provvede a servire le funzioni come op/deop , kick/ban e molti altri ancora ai suoi utenti registrati. Essi sono particolarmente efficaci sui networks sui quali non esiste la possibilita' di registrare il canale, come ad esempio EFnet o IRCnet..." Continua citando vari tipi di bots come Acidblood, Combot, EnergyMech, IncuBot, Hackbot, VladBot.. indicando che ve ne e' uno che sopravvive nel tempo: l'Eggdrop. Quello che inizialmente mi ha fatto sorridere di questa cosa e' quanto oggi concettualmente i bots siano cambiati: questo e' dovuto essenzialmente all'IRCwar. Oggi e' impensabile che un bot come viene descritto sopra possa semplicemente eseguire le sue brave funzioncine, sembra allucinante ma come le cose stanno andando ai tempi nostri, un bot per poter servire i suoi utenti e tenere vivo il canale deve sapere dapprima proteggere se stesso. Fintanto che un bot non e' protetto e sufficientemente stabile non sara' di nessun aiuto ne' a voi ne' ai vostri amici e nemmeno al canale. Pertanto sorgono spontanee le domande "come proteggo il mio bot?", "come rendo il mio bot piu' sicuro?" Innanzitutto, esperienza insegna, la prima cosa che occorre ancor prima di settare il vostro bot e quello di possedere una shell stabile (maddai?) :DD Premesso questo (che non e' poco) addentrandoci un poco a conoscere il bot, e piu' specificamente vi parlero' dell'eggdrop. La fortuna di questo bot nato nel dicembre del lontano 1993 risiede essenzialmente in due fattori: primo e' scritto interamente in C rendendolo veloce e robusto, secondo ha il grande pregio di supportare il linguaggio TCL che rende facile la creazione di scripts che gli si vanno ad aggiungere per migliorarne l'efficenza. Di versioni dell'eggdrop ne esistono parecchie, le piu' gettonate sono la 1.0p che e' indubbiamente molto vecchia, ma dicono non sia hakkabile (non faccio commenti in merito). La 1.1.5 forse e' la piu' conosciuta in assoluto, ma non e' essente da bachi e non e' nemmeno la piu' sicura, il suo punto forte e' stato il forte sviluppo di patch e script TCL scritte per la maggior parte da crew. La 1.2.0 era il compimento di tutti gli sforzi fatti fino ad allora fixando la maggior parte dei bug ed exploit trovati fino alla versione precedente. Secondo me la 1.2.0 e' stata sottovalutata ai suoi tempi, gia' si notava come la pigrizia di chi aveva grosse botnet non se la sentiva di cambiare tutto nuovamente. Ricordiamoci che pure per l'eggdrop va considerato il fatto che le versioni dispari sono beta. Infine esiste la serie 1.3.xx, che e' quella in attuale sviluppo, giungendo fino ad oggi alla versione 1.3.27 (e' anche l'unica versione supportata). Bisogna brevemente dire che non e' sempre stato lo stesso team a sviluppare l'eggdrop, il suo inventore Robey Pointer lo ha portato fino alla versione 1.0, poi evidentemente appagato del suo lavoro ha pensato bene di smettere. Successivamente un nuovo team capitanato da Beldin e Raistlin ha portato il suo sviluppo fino alla versione 1.3.23. Poi per varie storie che ora non sto a spiegarvi c'e' stata una rottura e stanno comunque attualmente lavorando ad un nuovo progetto sotto il nome di eggdrop 2.0 (prima del suo rilascio il nome verra' sicuramente cambiato), questo nuovo 'eggdrop' e' scritto interamente in C++ e per quanto mi rigurda dalle versioni alpha/beta che ho tentato di provare non ve ne e' stata una sola che sono riuscito a compilare interamente con successo. Non posso quindi dirvi nulla nello stato attuale in merito. Infine un nuovo team di sviluppo indipendente, per la maggior parte formato da persone provenienti dalla mailing list dell'eggdrop sta attualmente portando avanti il suo sviluppo, inserendo diverse nuove features che erano richieste a gran voce da diverso tempo dai suoi utilizzatori. L'intenzione del nuovo team e' di portare l'eggdrop entro l'anno a rilasciare la versione 1.4.0 stabile, ma non prima di aver corretto e aggiunto tutto quello che si sono prefissati. Anch'io ho iniziato a collaborare dando una mano al nuovo team di sviluppo (chissa' che un giorno potreste ritrovarvi con il primo eggdrop completamente o quasi tradotto in italiano) ad ogni modo reputo quest'ultima serie la migliore attualmente in circolazione, e ricordiamoci che un prodotto non piu' in sviluppo e supportato e' da considerarsi morto. Forse non vi ho ancora detto dove poter reperire un'eggdrop, ma la cosa e' piuttosto elementare... se non l'avete gia' potete trovarlo su www.eggheads.org oppure se preferite un ftp, ftp.tcslave.net/pub/eggdrop. Diamo ora un breve sguardo a come configurare un eggdrop, mi limitero' a dirvi l'essenziale, e mi basero' sull'ultima versione dell'eggdrop la 1.3.27 quella che attualmente utilizzo. E' indispensabile che leggiate almeno una volta il file eggdrop.conf.dist per potervi creare la vostra configurazione piu' adatta alle vostre esigenze. Non staro' qui a spiegarvi passo per passo ogni settaggio, ma mi limitero' a consigliarvi alcune delle opzioni da attivare o disattivare che reputo indispensabili per quanto riguarda la sicurezza, per il resto potete sbizzarrivi come meglio credete. 0 = disattivo 1 = attivo set protect-telnet 1 Attivando questo parametro tutti i collegamenti telnet che non provengono da un host registrato vengono automaticamente scartati. set open telnets 0 Se lo si attiva ogni utente tramite telnet puo' registrarsi al bot. (lo escludiamo che ne dite?? :D) set owner "" All'interno delle "" ci mettete i nick degli owners permanenti (di solito oltre al vostro nick si aggiungono le persone che hanno accesso alla shell se l'avete in comune). set must-be-owner 2 Qui ci sono 3 possibilita': con 0 non fa nulla, con 1 da l'accesso solo agli owner permanenti i comandi .tcl/.set, con 2 in piu' si limita anche il comando .dump I comandi .tcl e .set in passato per non renderli utilizzabili ad esterni si unbindavano e ne venivano bindati altri, solitamente cambiando il livello o semplicemente rinominando il comando. Essendo questi i commandi fra i piu' potenti e pericolosi e bene fare in modo che vi abbia accesso il minor numero di persone. La maggior parte degli exploit per guadagnare l'owner del bot passavano attraverso questi comandi. Ve ne e' un un'altro che non e' stato inserito fra i comandi che si possono limitare solo ai permanenti (pure questo ha contribuito a exploitare il livello di owner). Lo unbindiamo quindi a mano: unbind dcc n simul *dcc:simul Nel prossimo numero vi faro' vedere qualche esempio di come si puo' abusare di questi comandi per exploitare un eggdrop. set learn-users 0 Vi ricordate il famoso /msg botnick hello e vi ritrovate aggiunti al bot? Ecco questo e' quello che capita se lo attivate. (non scherziamo :-)) Le seguenti impostazioni sono molto importanti se volete sharare l'userfile della vostra botnet. set private-global 0 Se lo attivate il bot non accettera' nessuna flag globale dagli altri bots. (consiglio di non attivarla la spiegazione in merito la trovate nel comando seguente) set private-globals "" All'interno delle "" ci mettete le flag globali che non volete che il bot accetti dal resto della botnet Una piccola spiegazione in merito ai 2 esempi sopra, il primo esempio si parifica mettendo nel secondo caso "mnot", ma se nessun bot riceve le flag globali a cosa vale sharargli? Io vi consiglio di porre i limiti solamente all'vostro hub affinche' non accetti master/owner dagli altri bot, per la flag di op sta a voi decidere se limitarla o meno. set private-user 0 Se attivate questo flag il bot non accettero' nessun cambiamento all'userfile da parte degli altri bots. Il che significa che si e' costretti a fare ogni cambiamento espressamente dal hub bot. (Che succede se l'hub e' down?). Personalmente non lo consiglio. Questo era l'essenziale per quanto concerne la sicurezza del vostro file di configurazione affinche' non vi ritrovate immediatamente con il bot hakkato. Ovviamente non basta semplicemente editare il file di config, sono ampiamente consigliati l'aggiunta di una o piu' tcl. Ve ne sono piu' di 3000 pubbliche in giro che potete trovare nei vari siti di eggdrop, ve ne segnalo comunque un paio che ritengo siano ottime e che da sole sono complete di tutto quello che occorre e molto piu'. http://www.egghelp.org/ qua troverete la netbots.tcl creata da Slennox (che suona un po come Nelloz). L'altra la trovate qua: http://eggdrops.com/~kungfo0/ anche Kungfo0 ha realizzato una tcl completa di tutto anche se in maniera piu' complessa, ma ha delle features uniche che in altre non troverete (qui pero' ho trovato un paio di bugs). Forse vi chiederete che cosa uso io? Beh innazitutto devo dirvi che ho provato di tutto in passato, sperimentando tutto quello che mi sembrava carino, miscelando piu' soluzioni possibili (ho preso diversi spunti anche dalle TCL dei due autori che vi ho segnalato prima). In ogni caso attualmente sto usando una tcl realizzata da me, basata su di un'altra ancora ideata da un vero e proprio guru, una mente diabolica che si trova su efnet, dopo averlo contattato via email, e avergli notificato alcuni bug/correttivi e qualche miglioria che avevo apportato alla sua tcl, lui mi ha contattato, e da allora sviluppiamo la tcl in contemporanea con delle piccole varianti, lui, decisamente piu' kattivo, propende ad aumentarne il suo potenziale distruttivo portandosi all'estremo con features di hacking e cracking come ad esempio una funzione che provvede a hakkare la password degli ircop, vi posso assicurare che ne ha trovate diverse, mentre io d'altro canto molto piu' propenso alla difesa ho aggiunto alcune protezioni per il canale, il cuore comunque e' identico e per quanto riguarda la sicurezza ci siamo spinti molto avanti. Non vi ho detto il suo nome, per ovvi motivi, comunque vedro' di pubblicare qualcosa riguardante la mia TCL sul prossimo numero, visto che probabilmente vi ho stuzzicato un poco al riguardo. Dopo aver dato una breve panoramica sull'eggdrop, vediamo ora invece se riusciamo a crashare quelli degli altri.. =DDD Cominciamo col dire che i bot di oggi non sono piu' exploitabili dall'esterno: occorre come minimo essere aggiunti al bot stesso, oppurre si preferisce bukare la shella su cui risiedono. Vediamo comunque un paio di exploit che funzionano se il bot non e' prontamente patchato. Il primo funziona sugli eggdrop serie 1.1.5 (fonte rootshell). Telnettate con un host piu' lungo di 125 caratteri (createvi un bel vhost) alla porta host del bot e lo vedrete sparire dopo pochi istanti. :DD esempio: telnet connection from: die.lame.eggdrop.piece.of.shit.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE. DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE. DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE.DIE. .DIE.edu questo e' il suo risultato: [02:29] * Last context: dcc.c/791 [02:29] * Wrote DEBUG [02:29] * SEGMENT VIOLATION -- CRASHING! Vi riporto il patch per ovviare a questo problema, basta applicarlo al vostro eggdrop 1.1.5: +*/ + #if HAVE_CONFIG_H #include <config.h> #endif @@ -509,7 +523,15 @@ sprintf(s, "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); return s; } - strcpy(s, hp->h_name); + if (strlen(hp->h_name) > 119) + { + strncpy(s, hp->h_name, 120); + putlog(LOG_ALL, "*", "eggdrop 1.1.5 kill detected from %s", hp->h_name); + } + else + { + strcpy(s, hp->h_name); + } return s; } Ora vediamo come affondare un eggdrop 1.3.xx, questi bug affliggono tutta la serie 1.3.xx e pure alcune versione addietro fino alla 1.3.17 compresa, poi succesivamente sono stati fixxati (sono tutte info che si possono reperire sulla rete). 1. bot handshake Quando 2 bots nella botnet iniziano a linkarsi tra di loro si mandano il numero di versione, la cosa e' vista cosi': version 1031700 9 [piu' qualche testo futile] Ora se uno dei bot manda: version 1031700 9 diverse volte il bot provoca dei segfaults error e cade per buffer overrun. 2. user command overflows: Se fate diverse .note con @dummy il bot cade per segfault. Il @dummy e' importante perche' se non lo mettete verra' richiamata un'altra routine al suo posto. 3. the ignore command series (.+ignore,.ignore,.-ignore) Qui ci sono un pacco di overflows.. ignore con un host lungo, unignore host lungo, list ignore lungo etcc.. 4. .+ban <piu' volte> .-ban <piu' volte> 5. Questo e' carino... e' un exploit che pero' funziona solo localmente $ export HOSTNAME=3D"your.real.host.name <many a's(>1024 at least)>" $ ./eggdrop config.file Segmentation Fault 6. .jump irc.bla.org 6667 <piu' volte> 7. Se un utente ha una password ripetitiva ad esempio "abcabc" si puo' usare "abc" come pass per loggare nel bot, quindi un "a" puo' essere usata come pass al posto di "aaaaaa"... Ho trovato anche un exploit recente per sekkare dei piccoli/medi server IRC (a dipendenza anche da che software e che versione usano). E' molto simile a quello per l'eggdrop 1.1.5: vi collegate al server IRC con un lungo hostname (almeno 130+ caratteri), e dovrebbe cadere rapidamente per buffer overflow :)) E con questo per ora e' tutto (era ora hehe). Essendo questo il mio primo articolo (e forse non l'ultimo, ke sfiga avete) voglio ringraziare alcune persone. Innanzitutto ringrazio SMaster per avermi dato l'opportunita' di fare questa cosa. Ringrazio Zaltec, se non ti avessi conosciuto oggi non mi leggeresti qui :)) Ringrazio i genitori di PhoenYx per avercelo messo al mondo. Ringrazio Nelloz un giorno ti umiliaro' a Q3 stanne certo. Ringrazio Tsunami la quale dimostra che nel nostro ambiente non ci sono gli uomini. Ringrazio Budah perche' adoro le piramidi :DD Ringrazio tutti gli altri fratelli delle BadLands che non ho potuto menzionare per motivi di spazio :D Voglio fare un ringraziamento speciale alla Microsoft e a tutti i lamers perche' hanno reso utile la nostra esistenza. La microsoft per averci dimostrato come NON si programma un OS, i lamers perche' ci rendono meno noiose le giornate dandoci un motivo di sfogo. Ringrazio infine Linus Torvalds che ha fatto tutto quello che non ha saputo fare la MS fornendo il tutto gratuitamente. Infine saluto tutti gli Avatar augurando loro di potere accendere una nuova fiamma nelle tenebre che ci circondano. Se avete qualche appunto, chiarimento o insulto da farmi sapete dove trovarmi :-)) Operatore dammi un uscita, remember Matrix is everywhere and is watching you all! [-JoKeR-] --------------------[ previous ]---[ index ]---[ next ]--------------------- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ==============================================================================