==============================================================================
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--------------------[ 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 ]---------------------
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
==============================================================================