| Autore: PUOJACKZ | Data: 2006-01-08 |
| Modificato:
2006-10-21 |
Letture: 1089 |
|
*** DISCLAIMER *** L'autore del seguente e-book declina ogni responsabilità per un eventuale uso maligno derivato dalla lettura del contenuto informativo qui presentato. La creazione di un malware, tramite Bombe ANSI, consiste in una violazione dei seguenti articoli del codice penale dello stato italiano: 615 Quinquies, 635 Bis, 392). *** - *** - *** - *** L'ANSI.SYS è un driver per dispositivi, presente nell'OS Microsoft DOS, il quale ha lo scopo di fornire delle funzioni extra al prompt, attraverso delle combinazioni di codice ANSI Escape. Quest'ultimo, in particolare, si basa, parzialmente, sul riportare, ad un livello più user-friendly, tutta una serie di standard per il controllo terminale (richiesta proposta dall' "ANSI X3L2 Technical Committee on Codes and Character Sets (detto anche "X3 Committee")". Per attivare il driver ANSI.SYS, nel DOS, occorre aggiungere la seguente stringa nel file di sistema CONFIG.SYS: Sintassi DEVICE=[drive:][path]ANSI.SYS [/X] [/K] [/R] oppure DEVICEHIGH=[drive:][path]ANSI.SYS [/X] [/K] [/R] Parametri [drive:][path] Specifica la locazione del file ANSI.SYS. Switch /X Rimappa i tasti estesi, indipendentemente, nelle tastiere a 101 pulsanti /K Forza ANSI.SYS nel trattare la tastiera a 101-tasti come se ne avesse solo 84. Effetto equivalente al comando SWITCHES=/K. Se vi è la necessità di usare spesso il comando SWITCHES=/K, è bene sfruttare lo switch /K del file ANSI.SYS. /R Corregge lo scorrimento della linea, per migliorare la leggibilità del file ANSI.SYS. Switch usato nei programmi di lettura-schermo (il quale rende più facile l'uso del computer a persone disabili). Qualora venga caricato, l'ANSI.SYS abilita i codici per la colorazione del cursore e dei caratteri dello schermo. Vi è la possibilità, inoltre, di permettere ai programmi software di interagire con il cursore, spostandolo di posizione, abilitare il testo lampeggiante e altre features testuali e grafiche similari. Con tale driver, le stringhe riportate al monitor possono assumere fino a 16 combinazion di colori differenti (in "foreground"), mentre, per lo sfondo (in "background"), ne son disponibili fino ad 8. Grazie a tale driver è possibile cambiare la modalità video, dalla modalità testuale 80x25, ad 320x200, oppure 640x200, (in modalità testo a 40 colonne), questo a seconda della scheda video installata. Nota: Sostituti del file ANSI.SYS (es. NANSI.SYS o FCONSOLE.DEV) possono funzionare ugualmente, ma essere incompatibili con alcuni software. La mappatura dei caratteri della tastiera Una delle opzionalità più interessanti dell'ANSI.sys è la rimappatura dei pulsanti della tastiera, utile per effettuare vari collegamenti o macro per istruzioni complesse. Tale feature è anche il componente fondamentale utilizzato dai kiddie per la creazione di trojan semplici, tramite file di testo, detti "Bombe ANSI" (ANSI Bombs). Il compito di quest'ultimi è quello di ri-assegnare le funzioni della tastiera, con comandi DOS pericolosi, quali "Format", oppure "Del", oppure, il tasto N, con quello del Y (usato per le risposte Yes/No). Il file ANSI.SYS è presente in vari OS Microsoft: MS-DOS, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP Il file ANSI.SYS è richiesto per eseguire alcuni software che necessitano di tale driver per il posizionamento del cursore, oppure, per le funzioni di controllo del colore, oltre a permettere l'attivazione di codici colori elaborati, direttamente dal prompt di DOS. L'impiego delle librerie grafiche, in passato, avveniva, con frequenza, nei BBs, in quanto, permetteva la creazione di ASCII Art di maggior qualità. Le funzioni di ri-posizionamente, invece, han trovato un gran impiego nei giochi per PC ed in tutti quegli applicativi ove si pensò d'introdurre una interazione maggiore, da parte dell'utente, con l'ambiente virtuale creato. Come interagire con l'ANSI.sys Nel DOS, è possibile sfruttare il comando PROMPT, per accedere al codice ASCII Escape e sfruttare le potenzialità dell'ANSI.sys. Sintassi: PROMPT [testo] testo Specifica un nuovo Prompt dei comandi Tale comando, infatti, può tornar utile per personalizzare il prompt di DOS. Ad esempio, la versione standard "C:\>" è composta da un comando PROMPT che, all'inizio, viene settato con i parametri $P$G. Qui di seguito è presente la lista di parametri disponibili (in ambiente DOS su WINXP PRO): $A & (e commerciale) $B | (pipe) $C ( (parentesi sinistra) $D Data corrente $E Codice escape (codice ASCII 27) $F ) (parentesi destra) $G > (simbolo maggiore di) $H Backspace (cancella carattere precedente) $L < (simbolo minore di) $N Unità corrente $P Unità corrente e percorso $Q = (simbolo uguaglianza) $S (spazio) $T Ora corrente $V Numero della versione di Windows XP $_ Ritorno a capo e avanzamento riga $$ $ (simbolo dollaro) Qualora le estensioni, dei comandi, siano abilitate, il comando PROMPT può supportare anche: $+ zero o più caratteri "+" a seconda della profondità dello stack delle directory di PUSHD, un carattere per ogni livello nello stack. $M Visualizza il nome remoto associato alla lettera di unità corrente o una stringa vuota se l'unità corrente non è un'unità di rete. Per far in modo che le modifiche al prompt siano permanenti, occorre aggiungere il comando, con i relativi parametri, nell'AUTOEXEC.BAT (localizzato come file di sistema nascosto, nella directory principale). Ad esempio, per cambiare gli attributi colore del prompt di MS-DOS, occorre seguire la seguente sintassi: $e[xx;yy;zzm ove xx = è il codice attributo, yy = codice colore di foreground e zz = codice colore di background. Parametri impiegati nelle sequenze Escape ANSI Pn Parametro numerico. Specifica un numero decimale Ps Parametro selettivo. Specifica un numero decimale usato per selezionare una funzione. Puoi specificare più di una funzione separando i parametri con dei ; PL Parametro Riga. Specifica un numero decimale che rappresenta una delle linee del monitor o di un altro dispositivo Pc Parametro colonna. Specifica un valore decimale che rappresenta una delle colonne nel monitor o in un altro dispositivo Sequenze Escape per il movimento del cursore, per la grafica e i settaggi della tastiera. Qui di seguito, l'abbreviazione ESC rappresenta il carattere escape ASCII 27 (1Bh), il quale appare all'inizio di ogni sequenza. ESC[PL;PcH Posizione Cursore: Sposta il cursore alla posizione specifica (coordinate). Se la posizione non viene specificata, il corsore viene spostato alla posizione di partenza (che si trova nell'angolo in alto a sinistra dello schermo; nello specifico nella Riga 0 alla colonna 0). Questa sequenza funziona allo stesso modo della relativa impiegata per specificare la posizione del cursore ESC[PL;Pcf Posizione Cursore Alternativa: Funziona allo stesso modo della sequenza precedente ESC[PnA Cursore in sù: Sposta il cursore sù di un numero specificato di righe, senza cambiare colonna. Se il cursore è già nel margine dello schermo, l'ANSI.SYS ignorerà l'input fornito dalla sequenza. ESC[PnB Cursore in giù: Sposta il cursore in giù di un numero specifico di righe senza cambiare colonna. Se il cursore è già nel margine dello schermo, l'ANSI.SYS ignorerà l'input fornito dalla sequenza. ESC[PnC Cursore in Avanti: Sposta il cursore in avanti (rispetto il sistema di scrittura sinistra-destra) del numero di colonne specificate, senza cambiare riga. Se il cursore è già nel margine dello schermo, l'ANSI.SYS ignorerà l'input fornito dalla sequenza. ESC[PnD Cursore Indietro: Sposta il cursore indietro (rispetto il sistema di scrittura sinistra-destra) del numero di colonne specificate, senza cambiare riga. Se il cursore è già nel margine dello schermo, l'ANSI.SYS ignorerà l'input fornito dalla sequenza. ESC[s Conservazione Posizione Cursore: Mantiene la posizione corrente del cursore. Per riportare il cursore all'ultima posizione conservata, occorre usare la sequenza di Recupero Postazione Cursore. ESC[u Recupero Postazione Cursore: Sposta il cursore alle ultime coordinate mantenute usando la sequenza di Conservazione Posizione Cursore. ESC[2J Cancellare il Display: Pulisce lo schermo e sposta il cursore alla posizione di partenza (riga 0, colonna 0). ESC[K Pulisci Riga: Rimuove tutti i caratteri presenti dalla posizione del cursore alla fine della riga (incluso il carattere presente nella posizione del cursore). ESC[Ps;...;Psm Setta la Modalità Grafica: Richiama le funzioni grafiche specificate dai seguenti valori. Queste funzioni specifiche rimangono attive fino a quando non vengono modificate dalla successiva sequenza di Escape. La modalità grafica cambia il colore e gli attributi di testo (es. grassetto o sottolineato) visualizzati nello schermo. Attributi di testo 0 Tutti gli attributi spenti 1 Grassetto Attivo 4 Sottolineato (solo con un adattatore di display monocromatico) 5 Lampeggio Attivo 7 Video Inverso Attivo 8 Nascosto Attivo Colori di Foreground 30 Nero 31 Rosso 32 Verde 33 Giallo 34 Blu 35 Magenta 36 Ciano 37 BiancoWhite Colori di Background 40 Nero 41 Rosso 42 Verde 43 Giallo 44 Blu 45 Magenta 46 Ciano 47 Bianco NB: I parametri dal 30 al 47 son quelli considerati dallo standard ISO 6429. ESC[=psh Setta la Modalità: Cambia la profondità dello schermo o il tipo con la modalità specificata da uno dei seguenti valori: 0 40 x 148 x 25 monocromatico (testo) 1 40 x 148 x 25 colore (testo) 2 80 x 148 x 25 monocromatico (testo) 3 80 x 148 x 25 colore (testo) 4 320 x 148 x 200 a 4 colori (grafica) 5 320 x 148 x 200 monocromatico (grafica) 6 640 x 148 x 200 monocromatico (grafica) 7 Abilita il line wrapping 13 320 x 148 x 200 colore (grafica) 14 640 x 148 x 200 colore (grafica a 16 colori) 15 640 x 148 x 350 monocromatico (grafica a 2 colori) 16 640 x 148 x 350 colore (grafica a 16 colori) 17 640 x 148 x 480 monocromatico (grafica a 2 colori) 18 640 x 148 x 480 colore (grafica a 16 colori) 19 320 x 148 x 200 colore (grafica a 256 colori) ESC[=Psl Modalità di Reset: Re-Setta la modalità utilizzando lo stesso valore presente nel settaggio di modalità (ESC[=psh), tranne per il parametro 7, il quale disabilita il line wrapping. L'ultimo carattere presente in questa sequenza di escape è l'L minuscolo. ESC[Codice;Stringa;...p Setta le impostazioni della Tastiera: Ridefinisce i tasti della tastiera alla stringa specificata. Il parametro per questa sequenza di escape è definito come segue: * Il parametro Codice può contenere uno o più valori listati nella tabella presentata qui di seguito. Tali valori rappresentano i tasti della keyboard e le relative combinazioni. Quando vengono usati in un comando, dev'essere digitato anche il ; visualizzato nella tabella, oltre a quello richiesto dalla sequenza. I codici in parentesi potrebbero non essere disponibili in alcune tastiere. L'ANSI.SYS non interpreterà il codice nelle parentesi per tali keyboards fino a quando non verrà specificato il parametro switch /X nel comando DEVICE ove si và a definire l'uso dell'ANSI.sys. * Il parametro Stringa può essere sia un codice ASCII di un singolo carattere, oppure una stringa racchiusa da delle virgolette "". Ad esempio, sia il 65 (ASCII), che l'"A" possono essere usati per rappresentare l'A maiuscolo. IMPORTANTE: Alcuni dei seguenti valori presenti nella tabella non son disponibili/validi in certi computers. Prima di effettuare eventuali operazioni, è bene controllare la documentazione del proprio PC riguardo eventuali citazioni a riguardo (es. mancata disponibili, diversità nei valori ecc.) Tasto Codice SHIFT+Codice CTRL+Codice ALT+Codice F1 0;59 0;84 0;94 0;104 F2 0;60 0;85 0;95 0;105 F3 0;61 0;86 0;96 0;106 F4 0;62 0;87 0;97 0;107 F5 0;63 0;88 0;98 0;108 F6 0;64 0;89 0;99 0;109 F7 0;65 0;90 0;100 0;110 F8 0;66 0;91 0;101 0;111 F9 0;67 0;92 0;102 0;112 F10 0;68 0;93 0;103 0;113 F11 0;133 0;135 0;137 0;139 F12 0;134 0;136 0;138 0;140 HOME (Tast. Numerico) 0;71 55 0;119 A UP ARROW (Tast. Numerico) 0;72 56 (0;141) A PAGE UP (Tast. Numerico) 0;73 57 0;132 A LEFT ARROW (Tast. Num) 0;75 52 0;115 A RIGHT ARROW (Tast. Num) 0;77 54 0;116 A END (Tast. Numerico) 0;79 49 0;117 A DOWN ARROW (Tast. Num) 0;80 50 (0;145) A PAGE DOWN (Tast. Num) 0;81 51 0;118 A INSERT (Tast. Num) 0;82 48 (0;146) A DELETE (Tast. Num) 0;83 46 (0;147) A HOME (224;71) (224;71) (224;119) (224;151) UP ARROW (224;72) (224;72) (224;141) (224;152) PAGE UP (224;73) (224;73) (224;132) (224;153) LEFT ARROW (224;75) (224;75) (224;115) (224;155) RIGHT ARROW (224;77) (224;77) (224;116) (224;157) END (224;79) (224;79) (224;117) (224;159) DOWN ARROW (224;80) (224;80) (224;145) (224;154) PAGE DOWN (224;81) (224;81) (224;118) (224;161) INSERT (224;82) (224;82) (224;146) (224;162) DELETE (224;83) (224;83) (224;147) (224;163) PRINT SCREEN A A 0;114 A PAUSE/BREAK A A 0;0 A BACKSPACE 8 8 127 (0) ENTER 13 A 10 (0 TAB 9 0;15 (0;148) (0;165) NULL 0;3 A A A A 97 65 1 0;30 B 98 66 2 0;48 C 99 66 3 0;46 D 100 68 4 0;32 E 101 69 5 0;18 F 102 70 6 0;33 G 103 71 7 0;34 H 104 72 8 0;35 I 105 73 9 0;23 J 106 74 10 0;36 K 107 75 11 0;37 L 108 76 12 0;38 M 109 77 13 0;50 N 110 78 14 0;49 O 111 79 15 0;24 P 112 80 16 0;25 Q 113 81 17 0;16 R 114 82 18 0;19 S 115 83 19 0;31 T 116 84 20 0;20 U 117 85 21 0;22 V 118 86 22 0;47 W 119 87 23 0;17 X 120 88 24 0;45 Y 121 89 25 0;21 Z 122 90 26 0;44 1 49 33 A 0;120 2 50 64 0 0;121 3 51 35 A 0;122 4 52 36 A 0;123 5 53 37 A 0;124 6 54 94 30 0;125 7 55 38 A 0;126 8 56 42 A 0;126 9 57 40 A 0;127 0 48 41 A 0;129 - 45 95 31 0;130 = 61 43 A- 0;131 [ 91 123 27 0;26 ] 93 125 29 0;27 92 124 28 0;43 ; 59 58 A 0;39 ' 39 34 A 0;40 , 44 60 A 0;51 . 46 62 A 0;52 / 47 63 A 0;53 ` 96 126 A (0;41) ENTER (Tastiera) 13 A 10 (0;166) / (Tastiera) 47 47 (0;142) (0;74) * (Tastiera) 42 (0;144) (0;78) A - (Tastiera) 45 45 (0;149) (0;164) + (Tastiera) 43 43 (0;150) (0;55) 5 (Tastiera) (0;76) 53 (0;143) A Introduzione alle Bombe ANSI E' bene sottolineare che certi programmi sfruttano il proprio codice ANSI interno, il quale, spesso non supporta la ridefinizione dei tasti della tastiera. Pertanto, può accadere che un eventuale tentativo nocivo, finalizzato nell'impostare combinazioni quali DEL *.*, potrebbe non funzionare "A monte". Inoltre, gli AV, oggi giorno, controllano l'eventuale mappatura di certi caratteri, con comandi o codici pericolosi, pertanto, un eventuale tentativo di danno verrebbe bloccato. In certi casi, qualche simpaticone potrebbe aver inserito una sequenza distruttiva, all'interno dei files compressi, la quale sarebbe finalizzata all'autoesecuzione, nel caso vengano visualizzati i commenti al file. Ovviamente, le ultime versioni di strumenti per la compressione hanno delle impostazioni che bloccano l'esecuzione di codice attivo nei commenti. Inoltre, se un utente visualizza stringhe quali "FORMAT" oppure "DEL", all'interno di una sequenza, ovviamente, non andrà ad eseguire o decomprimere tale file. Occorre sfatare alcune credenze errate riguardo il file VANSI.SYS, relative all'ipotetica protezione che quest'ultimo offrerebbe, al sistema, contro la ridefinizione dei tasti. Nelle versioni più recenti, è probabile che ciò non accada, ma in quelle più datate, tale funzione è presente come in un semplice ANSI.sys. Come già spiegato, sfruttando l'ANSI.sys, è possibile ridefinire le funzioni operate dai tasti della propria keyboard. Un semplice comando di base è: ESC [13;27p (ESC sta per il codice di ANSI Escape). Quest'ultimo rimappa il pulsante "Invio" (ASCII 13), nell'ESC (ASCII 27). In questo caso, il primo numero corrisponde a quello che verrà mappato, da quanto è indicato nel secondo numero, separato dal primo con un ";". Qualora ci fosse stato uno 0, nel primo numero, ciò significava che il tasto era in modalità estesa, pertanto, i primi 2 numeri, corrispondevano al codice. La parentesi quadra aperta indica l'inizio della definizione, che termina col carattere "p". Ovviamente, è impossibile ridefinire delle stringhe di testo, però e qui parte il concetto di Bomba ANSI, è possibile mappare, in un pulsante, una stringa, che può corrispondere ad un comando valido per il prompt. Es. ESC [13;"SinSalaBin"p Nell'esempio, in caso di pressione del pulsante "Invio", appare la stringa "SinSalaBin". Es. ESC [13;"Del *.*";13p In questo caso, la pressione del tasto "Invio" è rimappata alla scrittura della stringa "Del *.*" + una pressione automatica dell'Invio, la quale comporta la cancellazione di tutti i files presenti nella directory di lavoro corrente. Una sequenza di escape può esser dotata di tutti i comandi che si vuole, ma ognuno di questi dev'essere separato da un ";". In ogni codice escape è possibile ridefinire solo 1 tasto, pertanto, qualora si vogliano ridefinire più pulsanti, occorrerà avviare più sequenze. Approfondimenti: Ridefenizione dei tasti Y ed N ESC [78;89;13p ESC [110;121;13p La seguente bomba ANSI rimappa l'"N" maiuscolo in "Y" e l'"n" minuscolo in "y". Questa sequenza, oggi giorno, è poco usata se non durante l'interazione con vecchi programmi di DOS. Potrebbe essere impiegata, da qualche attaccante, per far impazzire l'utente con dei programmi che necessitino di rispondere con i pulsanti Y/N, ma in un ambiente Windows, in caso di necessità, è possibile terminare un eventuale malware usando il TaskManager. Ovviamente, perchè tale ridefinizione dei pulsanti sia permanente, occorre che la sequenza venga inserita nell'AUTOEXEC.bat. Trasformare i comandi in altri comandi Un esempio di bomba ANSI sta nel mappare dei comandi in altri comandi. Ad esempio, quando un utente digita il comando "DIR", viene eseguito un "DEL *.*". Come è stato già detto, non è possibile modificare una stringa, ma, in questo caso, si può ricorrere nel modificare alcuni tasti, al fine di iniettare un comando, invece che un altro. Quando un utente digita un comando da eseguire, preme i pulsanti che compongono la stringa di richiamo al nome dell'eseguibile relativo a ciò che dev'essere avviato (es. compone la sequenza "D", "I", "R", per il comando DIR ecc.). Se, però, vengono mappati, nei pulsanti I ed R, i codici ASCII dei caratteri "E" ed "L *.*", si otterrà la scrittura di "DEL *.*", non effetivamente digitata.
|