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!!!"