Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

[Parte.2] Missione Sasser, attacco al potere

continua dal post precedente

Sasser non era mai stato così sicuro come in questo momento. Sapeva che l'OS aveva già rilevato la sua presenza, ma nonostante questo era conscio e ben sicuro di quello che stava per fare. L'entità si trovava in un posto al sicuro all'interno della RAM del sistema: non che l'OS non potesse rilevarla, però la memoria era così vasta che c'era una minima probabilità che qualche scanner capitasse proprio in quel punto. Voleva agire alla svelta, perchè così voleva il suo codice interno. Un malicious code è un'entità semplice, elementare e nemmeno molto estesa in termini di bytes, ma al tempo stesso è letale, efficiente ed ottimizzata ad uno scopo predeterminato. Nel caso di Sasser, l'obiettivo è provocare lo shutdown di sistema, la morte temporanea di tutti i thread e di tutti i bytes che mantengono in vita il sistema stesso.
Aspettando il momento buono per agire, lo heap di Sasser diede un'occhiata sui bus di sistema alla ricerca di quello che lo avrebbe aiutato a raggiungere il suo scopo: l'unica possibilità era di intercettare un function pointer, un puntatore a funzione, ovvero una cella di memoria contenente non tanto un semplice dato, ma l'indirizzo di memoria di una routine. Routine che, prima o poi, sarebbe stata richiesta ed eseguita dall'OS o da uno dei suoi processi secondari.

Il function pointer era stato emesso dall'OS con un compito ben preciso. Vagare lungo il sistema e fare da esca al Sasser che era stato rilevato da qualche parte. Conteneva il valore 0xFF00EE10F4 che non era tanto un valore, quanto un address di una routine-trabocchetto continuamente monitorata dall'OS, da navnt.exe e da altri security-thread ad alta priorità. Era triste e un po' preoccupato, perchè si rendeva conto che la sua era una missione kamikaze, non aveva un futuro, fra qualche ciclo di clock la sua esistenza sarebbe terminata improvvisamente. Si guardò attorno, mentre procedeva ad una velocità scandita dal clock di sistema a 2,21Ghz, osservò - quasi con nostalgia - le celle di memoria, i CRC, i bus che si snodavano in tutte le direzioni davanti a lui. Presto - si disse il function pointer - sarà tutto finito.

Durò un attimo, e il function pointer nemmeno se ne accorse. Sasser vide l'address contenuto nel function pointer, fece un balzo in avanti assorbendo tutti e 32 i bit del function pointer. Durante il ciclo di clock successivo, Sasser aveva già acquisito e fatto proprio l'address memory. "Il momento è giunto. Ho raggiunto il mio scopo!". Tutti i bytes che componevano l'entità esultarono all'unisono, ansiosi, finalmente, di poter dare il proprio contributo all'azione del malicious code che ciascuno di loro contribuiva a formare. Sasser cominciò la propria corsa verso la destinazione 0xFF00EE10F4 dettata dal function pointer catturato. I bytes formarono un flusso di dati continuo lungo il bus, si insinuarono in codifica JPEG e in altri strutture dati nel tentativo di muoversi nel sistema mantenendosi il più possibile invisibile agli occhi dell'OS. L'indirizzo 0xFF00EE10F4 era il primo indirizzo di una funzione originariamente scritta in C++, compilata fino a diventare codice in assembly puro.

"Function pointer catturato. Sasser è diretto all'indirizzo 0xFF00EE10F4. Preparatevi a fermarlo!" L'OS ordinò in modo deciso e perentorio. Non conoscendo un lato umano, l'OS agisce secondo il proprio codice, senza alcuna eccezione, senza fare sconti a nessuno. Il processo navnt.exe sorrise all'idea dell'ennesimo successo che stava per avvenire. Sfruttando alcuni canali preferenziali offerti dal kernel, si configurò tramite un hook a basso livello, che lo avrebbe trasportato immediatamente all'address memory interessato non appena si fosse scatenato un evento come in questo caso la comparsa della firma digitale di Sasser.

Sasser entro nell'address memory e vi si memorizzò, cominciando le prime operazioni preliminari per sabotare il Program Counter e poter eseguire il proprio internal code. Ma non riuscì nemmeno a cominciare. La cella 0xFF00EE10F4, fino ad un attimo prima tranquilla come una qualsiasi altra cella del sistema, venne blindata. Sasser guardò inorridito gli agenti di navnt.exe avanzare inesorabilmente verso di lui.
"Come è potuto succedere?" - chiese Sasser a navnt.exe - "Come avete fatto a scoprirmi?"
"Non c'è un come, non c'è un perchè." - gli rispose di rimando il processo - "Tu non puoi stare più. Non ti saranno concessi sconti. Troppe volte hai avuto la libertà di colpire sistemi come questo in cui ti trovi, sistemi meno protetti, ma che hanno anche loro il diritto di rimanere attivi. Oggi pagherai per tutte le tue colpe."
Sasser non seppe come rispondere, non era programmato a rispondere, a dialogare e ad interagire con altri processi. Il suo compito era semplice, si era detto numerose volte, ma aveva fallito. Non seppe come reagire di fronte al panico che provava. Così, Sasser decise di stare in silenzio e di affrontare il proprio umiliante destino. navnt.exe svanzò verso ciascun bytes di Sasser, circondandoli e chiudendogli ogni possibilità di fuga. Ogni singolo valore venne sovrascritto, e con un solo ciclo di clock Sasser venne eliminato e reso inoffensivo. navnt.exe notificò il successo al kernel e all'OS che si occuparono a loro volta di trasmettere l'informazione a tutti i processi attivi, fino alla UI del sistema operativo utente.

OS, kernel e navnt.exe sedevano nel loro ufficio. Compiaciuti, felici e questa volta sereni per lo scampato pericolo. Ma i pericoli in un sistema x86, così come in tutti gli altri sistemi, non finiscono mai, e di questo erano ben consapevoli.

Igor aveva acceso il PC da poco più di un minuto. Mosse leggermente il mouse per accendere il monitor. Quando il suo CRT si illuminò, Igor vide al centro dello schermo una finestra di Norton Antivirus che lo informava del fatto che una minaccia era stata appena sventata. Il sistema era sicuro, pulito ed efficiente come al solito. "Meno male..." - si disse il giovane sviluppatore - "...devo finire HappySign!!!"

powered by IMHO 1.2

Print | posted on mercoledì 23 novembre 2005 13:27 | Filed Under [ 010 .bytes. 010 ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET