Carlo's profileBlog semiserio di CarloPhotosBlogListsMore Tools Help

Blog


    November 25

    MusicBrainz e l' "Audio Fingerprint": impronte digitali audio, riconoscimento di brani musicali attraverso servizi web

     

    Mi sembra doveroso dedicare un post a MusicBrainz ed a ciò che gli gira attorno; partiamo dall'homepage

    http://musicbrainz.org

    Senza entrare troppo nel dettaglio, diciamo che consente di fare questo: vi sarà capitato alcune volte di trovarvi con dei file audio in mp3 (corrispondenti a brani musicali) senza un nome indicativo (ad esempio semplicemente File5.mp3 o altro) e senza nemmeno i tag identificativi (quelli visibili ad esempio dalla maschera Proprietà). Tramite uno dei programmi client indicati nel sito, è possibile selezionare uno o più file audio sul proprio sistema e farli analizzare a MusicBrainz. Di ogni file audio vengono prelevate determinate informazioni relative al contenuto (la cosidetta impronta digitale audio o audio fingerprint) e l'impronta digitale audio viene poi inviata al web service di MusicBrainz che provvederà a confrontarla col suo database: in presenza di match, MusicBrainz fornirà i tag relativi a quel brano (autore, album, nome della canzone, etc.. anch'essi presenti nel suo database assieme all'audio fingerprint) e tramite l'applicativo client potranno essere applicati al file audio in questione presente sul nostro sistema (oltre alla rinomina del file usando un formato settabile: ad esempio <nome_auotre> - <nome_album> - <numero_brano> - <nome_brano> giusto per fare un esempio). Per poter accedere al database di MusicBrainz è necessario registrarsi: nulla di doloroso, semplicemente una semplice form in cui inserire uno username ed una password (ed una email opzionale se si vuole disporre di tutte le funzionalità offerte). Come applicazione client uso Picard: è Open Source in Python e gira su Windows, Linux e Mac OS X. Attualmente è disponibile la beta della nuova versione 0.9.0 che si differenzia sotto diversi aspetti dall'ultima release stabile che è la 0.7.2; per il momento continuo ad usare la 0.7.2

    Per chi volesse approfondire (altri applicativi client, software e documenti vari inerenti l'Audio FingerPrint, il database usato e la possibilità di scaricarselo e tenerlo in sincro con quello remoto, il Web Service, l'SDK per integrare l'interazione con MusicBrainz nei propri programmi e tanto altro (della serie di tutto e di più), rimando alla homepage ed al suo menù semplice, completo e diretto.

    November 24

    Windows Firewalls: novità sui vari programmi e la versione 3 di Comodo Firewall Pro

     

    Già in un precedente post avevo parlato dei Firewall per Windows e dei test comparativi che possono essere trovati sul web. Due giorni fa mi sono installato la versione 3 di Comodo Firewall Pro (che da circa 1 anno è il mio preferito) e devo dire che ha un sacco di funzionalità in più rispetto alla versione precedente (la 2.4): ad esempio ha l'engine Defense+ che consente un dettagliato monitoraggio del sistema; ad esempio consente di definire File, Cartelle e Voci di Registro da tenere sotto controllo e rilevarne in tempo reale eventuali tentativi di modifiche. Le opzioni sono tante e ben dettagliate e rimando all'utilizzo diretto del programma per analizzarsele per bene. E' possibile settare vari livelli di controllo sia sul Firewall sia sul Defense+. I livelli più alti vanno impostati solo in caso di necessità di controllo ultradettagliato di ciò che gira sul nostro sistema, non sono applicabili in un normale contesto lavorativo in quanto vengono segnalate tutte le paranoie possibili ed è tutto un blocco e popup. I requisiti di sistema sono i seguenti

    • Windows XP – 32 and 64 bit versions
    • Windows Vista – 32 and 64 bit versions
    • 64 Mb RAM
    • 50 Mb free disk space

    quindi un'ampia gamma. Per chi ha ancora Windows 2000 viene tuttavia consigliata ancora la versioneprecedente (la 2.4). Devo provarlo su Windows 2003 e Windows 2003 R2 (bohh... dovrebbe andare, anche se ... bohh è da provare, adesso mi installo Tiny2003 su VMWare poi proviamo).

    Durante l'installazione vi sono varie opzioni che vengono proposte: fregatevene se non sapete cosa scegliere (è normale ...) e lasciate i valori di dafult oppure scegliete quelli che volete tanto poi, una volta installato, potrete impostare tutto dalla intuitiva interfaccia grafica del programma. Il programma ha la sua TrayIcon a forma di scudo bianco e da lì si apre un menù semplice e diretto. La voce Open consente di aprire la GUI principale del programma,organizzata molto bene in categorie. Poi ci sono le 2 voci in alto che consentono un rapido settaggio dei livelli di monitoraggio del Firewall (Firewall Security Level) e del Defense+ (Defense+ Security Level).

    Firewall Security Level:

    • Block All Mode
    • Custom Policy Mode  (normalmente uso questo valore)
    • Train with Safe Mode
    • Training Mode
    • Disabled

    Defense+ Security Level

    • Paranoid Mode
    • Train with Safe Mode
    • Clean PC Mode 
    • Traing Mode (normalmente uso questo valore)
    • Disabled 

    Con la GUI principale (voce Open) si può entrare poi molto nel dettaglio e lascio a voi il compito di essere mossi dalla curiosità ed analizzare le varie impostazioni che, come già detto in precedenza sono molto ben organizzate i gruppi e categorie.

    Voglio finire il discorso relativo a Comodo Firewall Pro portando un esempio del Defense+ all'opera in modalità Paranoid Mode; ho preso un programma che avevo fatto un paio di mesi fà e che consente di ottenere gli hash delle password di Windows relativamente al sistema su cui è in esecuzione il programma. Utilizza lo stesso approccio usato da Todd Sabin nel suo programma Pwdump2. Tuttavia non utilizza una dll aggiuntiva da mappare nello spazio di memoria di lsass.exe per prelevare gli hash ma realizza il tutto tramite Code Injection su lsass.exe. In soldoni il comportamento del programma è il seguente:

    allocare nello spazio di memoria del processo lsass.exe, un'area di memoria tale da contenere dati e codice da eseguire; l'allocazione avviene tramite l'api win32 VirtualAllocEx e la copia di codice e dati tramite l'api win32 WriteProcessMemory ; prima però occorre abilitare il Privilegio di Debug. Eseguire il codice nel contesto del processo remoto (lsass.exe) tramite l'api win32 CreateRemoteThread ; gli hash ottenuti dal codice eseguito in remoto vengono spediti al processo corrente (il programma che stiamo eseguendo, tanto per intenderci) tamite un Kernel Object di tipo Named Pipe.

    Il programma è scaricabile (binari e sorgenti, in doppia versione GUI e Console) all'indirizzo seguente

    http://pasotech.altervista.org/delphi/codice/HashesDumper.7z (copia ed incolla nel browser)

    Useremo l'eseguibile GUI_Version\Bin\HashesDumper.exe

    Ecco come interviene Comodo Firewall Pro durante l'esecuzione del programma:

    1) Metto l'eseguibile (di un eseguibile nudo e crudo si tratta) sul Desktop e faccio doppio click:

    Rileva che stò per eseguire il programma

    Mi appare il programma

    Rileva l'accesso allo spazio di memoria di ctfmon.exe : Mi ritrovo con il programma aperto e pronto per l'uso e mi viene mandato in popup questo tentativo di accesso allo spazio di memoria di ctfmon.exe; niente di preoccupante, ctfmon.exe fa parte di Office: per maggiori informazioni al riguardo rimando a delle sane ed istruttive ricerche sul web.

    2) Bene, ora il programma è pronto per l'uso: click sul pulsante "Dump Hashes"

    Rileva il tentativo di accesso allo spazio di memoria di lsass.exe

     Rileva la richiesta di abilitazione del Privilegio di Debug

    ... e a questo punto vengono visualizzati gli Hash.

    Queste sono solo alcune delle tante cose che vengono rilevate dall'engine Defense+; tenetela abilitata nei livelli più alti e praticamente vi rileverà un pò di tutto.

    Bene, terminerei qui con la questione di Comodo Firewall Pro e proseguirei con le novità nei campo dei Firewall per Windows. Facendo riferimento ai test comparativi presenti all'indirizzo

    http://www.matousec.com/projects/windows-personal-firewall-analysis/leak-tests-results.php

    ho potuto notare che dai primi di Novembre, nei test il buon Comodo Firewall Pro v2.4 è stato scalzato dalla sua posizione di predominio da 2 Firewall che ora si contendono il titolo di Number One; per carità, Comodo Firewall Pro 2.4 è subito lì dietro a poche lunghezze di distanza (e poi ancora non hanno fatto i test con la versione 3) tuttavia è interessante notare i 2 Firewall che si trovano ora in testa a parimerito

    1. Online Armor Personal Firewall 2.1.0.19 Free : è disponibile in varie versioni di cui una freeware ed è su questa che sono stati condotti i test
    2. Agnitum Outpost Firewall Pro 2008 6.0.2162.205.402.266 : è un firewall a pagamento (è comunque disponibile una versione trial di 30 giorni), celebre e rinomato già da un pò di anni.

    E' bello vedere che anche in questo caso al primo posto c'è un prodotto freeware (Online Armor Personal Firewall): la compatibilità è con Windows NT/2000/XP (penso che si limiti alla versioni a 32 bit di XP); Vista non è supportato e, a quanto pare hanno appena cominciato ad analizzare la possibilità di creare una versione sufficientemente efficace per Vista; detto tra noi, non mi interessa se rilasceranno o meno in futuro una versione per Vista. Nel sito c'è anche il link a dei test che sono stati condotti da Nicm per verificare la capacità di una decina di applicativi (ivi incluso Armor Personal Firewall) di annullare eventuali tentativi di chiusura o disattivazione da parte di malware (i vari virus et similia cercano sempre di chiudere programmi antivirus o firewall e compagnia bella o in ogni caso di disattivarli). Entrando più nello specifico viene esaminata la capacità del software di protezione di evitare che l'eventuale malware vada a disabilitare gli hook settati su diverse api di Windows rendendolo quindi incapace di rilevare l'operato del malware stesso. Armor Personal Firewall si è classificato secondo dopo Process Guard.

    Penso che sicuramente me lo installerò a breve e farò un pò di prove ...

    November 20

    Registrare il Desktop: ottimo lavoro con Camstudio

     

    Con i software del tipo "Desktop Screen Recorder" è possibile salvare sotto forma di filmato il proprio Desktop. Ci sono diversi software sia Freeware sia a pagamento ed alcuni anche Open Source. Dopo averne provati parecchi (ed aver settato accuratamente per ognuno le diverse impostazioni in modo da testarne complessivamente le capacità) devo dire che Camstudio è veramente un buon software. Il progetto è presente su Sourceforge all'indirizzo

    http://sourceforge.net/projects/camstudio/

    Nella pagina di download, c'è il programma (Binari e Sorgenti relativamente all'ultima release ufficiale ossia la 2.0) ed il Codec Lossless (Binari e Sorgenti) che consente di effettuare una compressione senza perdita dei dati. Il Codec Lossless utilizza l'agoritmo di compressione LZO , un algoritmo di compressione Lossless OpenSource che fornisce un'ottima velocità di compressione (quindi ideale per essere utilizzato su flussi di dati elevati in realtime). In particolare utilizza la versione leggera miniLZO.

    L'autore del programma ha deciso di mettere a disposizione la Beta1 della versione 2.5 del programma all'indirizzo

    http://camstudio.org/dev/

    Il programma ha veramente delle ottime performance: riesce ad effettuare delle registrazioni perfette del Desktop, fluide e con ottima risoluzione, senza appesantire minimamente gli altri programmi in esecuzione; non ci si accorge minimamente che il programma sta registrando. Consente anche di registrare l'audio, sia dal microfono sia dagli speakers. Un'altra cosa ottima è la possibilità di definire una regione qualsiasi dello schermo e registrare quella regione invece dello schermo intero: si seleziona l'area esattamente come si seleziona una qualsiasi area di un immagine all'interno di qualsiasi programma di fotoritocco, ed il gioco è fatto. Consente di definire il codec audio ed il codec video da usare per la registrazione (assieme a tante altre opzioni audio e video, il tutto dal menù Options); un'altra funzionalità eccezionale è la capacità di convertire il filmato da .avi in .swf (Flash) per ottenere quindi una versione postabile sui vari siti di hosting video (Youtube, etc...)

    La homepage di riferimento del programma è

    http://camstudio.org/

    Qui si fa anche riferimento a Splandoo, un sito che consente tramite una semplice interfaccia web di scaricare i filmati in streaming dei principali siti di hosting video (YouTube, etc...): la pagina web contiene anche il link a FLV Player, un player freeware di filmati in formato FLV (il formato del filmato scaricato)

    Per ulteriori informazioni su Camstudio e/o il Codec Lossless (soprattutto in relazione agli ultimi aggiornamenti) si può anche far riferimento al blog dell'autore all'indirizzo

    http://www.camstudio.org/blog

    November 15

    Considerazioni varie ...

     

    Non vi preoccupate, non ho deciso di dare un taglio filosofico a questo blog; le considerazioni che farò in questo post vertono sempre sul tema portante del blog (cosi come del sito e del forum) ossia l'informatica (possibilmente quella più tecnica e priva di compromessi ... uhm ... bella sta frase, mi stupisco da solo a volte). In questi ultimi giorni è riaffiorato nella mia mente un pensiero di sempre e che ricorre di frequente ossia il fatto di rendere il sito ed il forum totalmente in lingua inglese. Ad essere sincero non mi ricordo il motivo per cui decisi a suo tempo (mi pare che fosse il Febbraio 2004) di usare l'Italiano per creare il mio sito (quello con nome e cognome intendo). Del resto la mia esperienza su internet sia attiva che passiva (ovvero sia in lettura cioè consultazione sia in scrittura cioè submit di articoli o codice) è sempre stata in ingese; le ricerche che faccio sul web son sempre in inglese così come la maggiorparte dei siti o forum che frequento; anche i miei contributi sotto forma di articoli e codice son sempre stati in Inglese (correvano gli anni 2000, 2001, 2002 soprattutto quando spesso postavo anche in anonimato). Forse in quel remoto Febbraio 2004 ero preso da un esagerato spirito nazionalistico e patriottico oppure non sò cos'altro fattostà che il sito nacque in Italiano e poi la cosa andò avanti per inerzia. Penso che sarebbe molto meglio che fosse in inglese; certamente non ho intenzione di effettuare una traduzione globale (anche perchè c'è parecchia roba) ma una decina di articoli probabilmente sì (e sicuramente gli articoli futuri): viviamo nel mondo di Internet e quindi ciò che mettiamo sul web è a disposizione di tutti; spesso rimango irritato quando vedo materiale interessante che però è scritto in lingua madre (spagnolo, francese, tedesco oppure cirillico, giapponese, cinese, etc...); in ogni caso non li tradurrei alla lettera anche perchè se son nati in quel modo tali devono rimanere ; più che altro farei una versione in Inglese dando un altro taglio (probabilmente molto più dettagliato e tecnico) degli argomenti trattati. La tendenza continuerebbe comunque ad essere quella di un resoconto tecnico affrontato però con toni comunicativi tipici della discussione tra amici (il taglio rigorosamente tecnico mi irrita, la discussione va sempre affrontata con una certa spontaneità ed immediatezza tipica del dialogo tra appassionati). Sicuramente il Blog continuerebbe a rimanere in italiano; ehh si ... il Blog ... questo strumento di comunciazione usato oramai da tutti. Senza ombra di dubbio è lo strumento di presenza sul web più utilizzato e quindi diciamo che è un passo forzato (così come è sempre più diffusa l'abitudine di distribuire documentazioni tecniche sotto forma di filmati su Youtube et similia). Se la comunicazione avviene principalmente tramite un determinato strumento allora tale strumento deve essere usato. Ad essere sincero non mi è mai interessato il concetto di Blog: i miei punti di riferimento son sempre stati i siti Web ed i Forum; l'unica cosa forse che non mi rende totalmente estraneo a questo strumento è la dichiarata spontaneità: essendo espressione di spontaneità, puoi chiaramente postare concetti senza porti più di tanto il problema della forma. Paradossalmente è sempre questa spontaneità a rendermi avverso un pò questo mondo: quanti sono i blog in cui l'autore posta senza pensarci 2 secondi quello che gli passa per la testa in quel momento; ci son certi blog dove c'è gente che ti racconta che la notte non hanno dormito perchè avevano mangiato troppo la sera prima ed avevano quindi problemi digestivi, oppure ti dicono che stan piangendo perchè la tipa di turno non li caga a sufficienza, oppure che sono in depressione e si sono ubriacati di brutto oppure che tra 2 ore usciranno a far baldoria e se c'è qualche contrattempo ti scrivono che c'è stato il contrattempo (e te lo dscrivono nel dettaglio) ... Paradossalmente è un diario in cui l'autore si racconta in presa diretta 24 ore su 24 ma a differenza del diario cartaceo classico che magari era dotato di lucchetto per proteggerlo da occhi indiscreti, questo è un diario agli occhi di tutti; come mi pare di aver già sottolineato in passato, io non ho mai avuto un diario, quando andavo a scuola i compiti li scrivevo alla rinfusa su pezzi di carta che poi mettevo in tasca (e nel mio disordine ordinato mentale trovavo sempre tutto). Certo avevo un'agenda per non sembrare l'unico sfigato privo di diario ma la usavo per scarabocchiarne le pagine come sfogo per le inutili e pallosissime ore di lezione che non finivano mai (soprattutto quando il professore di turno si addentrava in approfondimenti dettagliati che nessuno ci capiva una mazza e c'erano i soliti abbonati della prima fila che facevano sempre segno di sì con la testa quasi avessero una molla incorporata per far capire che stavano capendo tutto). Ma in ogni caso non son mai risucito a concepire l'idea di trascrivere i propri vissuti in un diario. Quali sono le arcane motivazioni che spingono uno scrittore di diario a comporre i suoi scritti? Vada poi per le cose belle che ti son capitate, ma ti vai a scrivere le sfighe? Sai che bella soddisfazione quando te le andrai a leggere ... invece di buttarti i problemi alle spalle e di proiettarti al futuro, stai lì ad approfondire sul passato. Poi una cosa che non mi piace son le contaminazioni: un sito deve avere un obiettivo, deve avere un argomento e sviluppare attorno a quell'argomento. Chi arriva ad un sito ci arriva perchè ha cercato determinate cose sui motori di ricerca e quelle cose vuole trovare. Ci sono alcuni che si presentano come esperti chessò di pasta e ceci ed invece di parlarti di pasta e ceci ti mettono 200 gallerie fotografiche di loro coi loro amici. Non è sbagliato a mio parere il fatto di mettere gallerie fotografiche ma il contesto in cui le si mette: se sei in siti il cui obiettivo è la conoscenza di altre persone per amicizia o altro allora è fondamentale, altrimenti è fuori luogo. Ad esempio che motivo c'è che io metta la mia foto qui sopra? Chiaramente vale anche il contrario: se mi registro a Badoo e poi metto i link a siti di programmazione allora sono un pirla. E qui mi fermerei che il discorso si sta facendo ampio (trooopppo ampio e sto perdendo il filo). In parole povere chi leggerà questo blog o il forum o il sito, troverà solo ed unicamente argomentazioni di informatica (purtroppo mi rendo conto adesso che contrariamente alle intenzioni inziali ho dato un taglio filosofico a questo post, azzz azzz).

    November 14

    Grafici di funzione

     

    Lo studio di funzione è uno degli argomenti principali trattati nei corsi di matematica universitari e nelle ore di matematica degli istituti superiori ad orientamento scientifico. Quello che vado a descrivere brevemente nel seguito è un buon programma per disegnare il grafico di una funzione: si chiama CrispyPlotter  ed il bello è che è gratuito ed anche Open Source. Vedendo questo programma in azione mi è venuto in mente il periodo antecedente l'esame di maturità scientifica ed in particolare lo studio delle prove di matematica delle sessioni passate: tra queste mi è rimasto impresso lo studio di funzione relativo mi pare alla sessione d'esame del 1983 (mi pare ...) in cui vi era appunto lo studio di funzione seguente

    sin(x)^3 + cos(x)^3

    e CrispyPlotter funziona correttamente

    Le sottofinestre possono tutte essere ridimensionate e/o spostate e/o chiuse ... Il grafico generato può essere copiato nella clipboard per un copia ed incolla oppure esportato in file immagine nei formati Bmp, Emf (Enhanced Meta File) e Svg (Scalable Vector Graphics) sempre con  la possibilità di selezionare gli intervalli di x e y; si può zommare con la rotella del mouse (oppure muovendo il mouse col pulsante destro premuto) e fare panning (trascinare) semplicemente muovendo il mouse col pulsante sinistro premuto. Si può anche esportare il grafico in altri formati non immagine come ad esempio formato di testo oppure nel formato audio Wav. Behh, è da provare ...

    November 12

    Creazione di file .chm (o WinHelp, etc...)

     

    Le documentazioni, gli help o i libri in formato digitale sono quasi sempre nei formati WinHelp, HTML-Help, WebHelp e PDF ; un'ottimo software freeware per creare tali tipi di documenti è HelpMaker . Da provare.

    November 11

    Virus, Trojan, sanboxes, etc.... proseguiamo

     

    Proseguiamo sulla strada spianata da un paio di post precedenti e continuiamo ad analizzare gli argomenti in questione. Lo spunto mi viene dato dal fatto che proprio oggi ho guardato la mia mail ed ho notato che in data 5 Novembre mi era arrivato il risultato dell'analisi eseguita dalla Sandbox Online CWSandbox. Del resto il post precedente in cui avevo preso in esame tra le altr anche la suddetta sandbox era datato 1 Novembre e siccome non avevo ricevuto notizie nell'arco di 2 ore, tenuto anche conto che le altre sandbox mandavano l'esito nell'arco massimo di 5 minuti, ho lasciato perdere la questione relativa a CWSandbox. Però poi ho visto che in data 5 Novembre mi era arrivato il risultato (4 giorni dopo) e per curiosità sono andato a dare un'occhiata: sono rimasto stupefatto perchè il livello di dettaglio fornito è stupefacente, senza dubbio il più elevato nell'ambito di tutte le Sanbox online; il link al risultato è il seguente

    http://beta.cwsandbox.org/?page=samdet&id=7571&password=pprrb

    e come si può vedere è mooolto ma mooolto dettagliato.

    Ho provato a fare un submit di una altro trojan e questa volta il risultato è arrivato dopo 2 minuti, e ciò significa che quando avevo fatto la prova in precedenza ero capitato in un contesto sfigato.

    A questo punto ho deciso di fare un'altra prova, questa volta utilizzando un crack che avevo scaricato una settimana fa da un forum: il crack si pone come obiettivo quello di estendere all'infinito il periodo trial di 15 giorni di Ulead Gif Animator 5.05 (scaricabile appunto in versione trial di 15 giorni dal sito web della Ulead). Molti si scaricano crack per patchare le varie versioni trial ma non pensano che spesso questi crack oltre a patchare installano anche dei trojan. Questo crack in particolare era un eseguibile autoestraente creato con winrar al cui interno vi era un file con estensione .dat di circa 1,2 Mega. Allora ho voluto fare una prova per vedere cosa effettivamente conteneva questo famigerato crack ed ho proceduto nella seguente maniera

    Ho preso come riferimento il mio Windows XP Professional installato come guest su VMWare Workstation 6 ed equipaggiato con Antivirus (il buon Nod32) e Firewall (Comodo Personal Firewall). Come prima cosa ho salvato lo stato del sistema guest in VMWare catturando uno snapshot di sistema (VM -> Snapshot -> Take Snapshot); a questo punto ho deciso di disattivare totalmente l'antivirus (in maniera tale da consentire all'eventuale virus o altro contenuti nel crack di esprimersi liberamente e poterne quindi analizzare il comportamento) e lasciare rigorosamente attivo il firewall in modo da controllare nel dettaglio le richieste di rete effettuate. Non rimaneva altro da fare che installarsi la versione trial di Ulead Gif Animator 5.05 ed applicargli la fantomatica patch: lanciata la patch, quasi instantaneamente il firewall mi comunica che un tale processo services.exe lanciato da un altro sospetto processo Incom_.exe sta cercando di accedere al web ... uhmm  un processo di nome services.exe per giunta presente in C:\windows, è chiaro che sti furbacchioni vogliono confonderci con c:\windows\system32\services.exe ossia il cosidetto Service Control Manager (SCM) che, lanciato da winlogon.exe, ha il compito di avviare i servizi. A questo punto noto un'altra cosa: che sti simpaticoni hanno anche previsto la disabilitazione del servizio di ripristino di sistema (Start -> Programmi -> Accessori -> Utilità di sistema -> Ripristino configurazione di sistema) con conseguente cancellazione irreversibile di tutti gli eventuali punti di ripristino presenti e probabilmente il programma va anche a disabilitare il firewall di Windows solo che in questo caso non è cambiato nulla rispetto a prima in quanto il firewall di Windows l'avevo già disabilitato per dare sapzio a Comodo Personal Firewall. Guardando l'elenco dei processi con Taskmanager è possibile vedere in esecuzione sto cavolo di services.exe eseguito con l'utenza corrente (oltre al services.exe di sistema eseguito con l'utenza SYSTEM). Se provo a killarlo mi dice che è impossibile farlo poichè è un processo di sistema. Effettivamente il file c:\windows\services.exe ha attivo l'attributo che lo identifica come file di sistema (ed anche l'attributo hidden che lo rende nascosto). Assegnare ad un file tale attributo è semplicissimo: basta usare l'api win32 SetFileAttributes; per un esempio in Delphi basta far riferimento alla seguente pagina web

    http://www.delphibasics.co.uk/RTL.asp?Name=FileSetAttr

    Allora ho provato a killarlo col Process Mater (copia ed incolla il link nel browser) : lanciando semplicemente l'eseguibile senza parametri si ottiene l'elenco dei processi ("pm.exe -h" per ottenere le info sui parametri passabili da linea di comando) e prendo il PID del proceso services.exe eseguito con l'utenza corrente (quello eseguito con SYSTEM è quello di sistema che non dobbiamo quindi toccare); con "pm.exe -k1i <pid>" riesco a killare il processo; come risultato però ottengo un errore critico di sistema che mi killa explorer.exe (la shell di windows); al riavvio di explorer.exe il famigerato services.exe ritorna in azione (stavolta lanciato da un tale fservice.exe o sservice.exe ... non mi ricordo bene, son sicuro che ci sono tutti e 2 ed ognuno rilancia l'eseguibile). Bene non se ne esce e decido di riavviare il tutto in modalità provvisoria: lo faccio sia nella forma classica sia nella forma più restrittiva che include unicamente la linea di comando ma mi ritrovo sempre sto services.exe malandrino tra le scatole. A questo punto ho iniziato una serie di analisi con vari programmi che mi hanno portato rapidamente ad inquadrare la linea di comportamento del trojan (soprattutto perchè chi l'ha scritto non aveva una conoscenza approfondita). Sarebbe troppo lungo e forse anche inutile stare qui a scrivere pagine intere per descrivere tutti i passaggi ed i ragionamenti fatti; diciamo che, una volta avuta un'idea di massima sul comportamento del trojan, ho rispristinato lo stato del sistema guest in VMWare (VM -> Snapshot -> Revert to Snapshot) e mi sono installato Sandboxie : ho reinstallato Ulead Gif Animator in versione trial ed ho eseguito la patch nella Sandobox (pulsante destro del mouse sull'eseguibile e click sulla voce RunSandboxed); alla fine la mia Sandbox conteneva tutti i file e tutte le voci di registro generati dalla patch (per visualizzarli basta aprire il controllo Sandboxie e "Function -> Contents of Sandbox -> Explore Contents"; le modifiche al registro sono contenute nel file RegHive: il contenuto di tale file è visualizzabile caricandolo da Regedit con File -> Carica Hive dopo aver selezionato una qualsiasi delle chiavi di base; è fondamentale alla fine scaricare l'hive con File -> Scarica Hive). Ho deciso di inviare a CWSandbox questo famigerato services.exe che mi ha tormantato e questo è stato il risultato dettagliato (che riflette l'analisi fata in prima istanza e 'analisi fatta con la Sandboxie)

    http://beta.cwsandbox.org/?page=samdet&id=11249&password=vbiiv

    E' interessante soprattutto analizzare le chiavi di registro che vengono create e /o modificate: ci danno una panoramica delle chiavi di registro solitamente utilizzate dei trojan per andare in esecuzione automatica. Tra i file creati si può notare la presenza di una dll tale reginv.dll che viene caricata nello spazio di memoria di regedit.exe per impedire la visualizzazione delle chiavi di registro create e/o modificate dal trojan: utilizza la semplice tecnica che ho esposto nell'articolo

    http://pasotech.altervista.org/delphi/articolo37.htm

    La conseguenza dell'utilizzo di tale tecnica è che anche le chiavi successive non vengono più visualizzate e chi va a fare dei seplici controlli su regedit si accorge che qualcosa non và. Per nascondere in maniera perfetta una chiave o un valore di registro (parliamo sempre di hiding in User Mode che sia chiaro) bisogna studiarsi il celeberrimo articolo di Holy_Father

    Invisibility on NT Boxes

    Un'altro punto debole è il fatto che tale dll non abbia influenza ad esempio sulla linea di comando (posso continuare tranquillamente a manipolare tutto il registro col comando REG) o anche su qualsiasi altro programma di enumerazione delle voci di registro: ad esempio ho provato ad usare il programmino all'indirizzo

    http://pasotech.altervista.org/delphi/codice/RegEnum.exe.7z (copia ed incolla il link nel browser)

    Settando come intervallo di tempo, un breve intervallo contenente l'istante di applicazione della patch, il programma restituisce effettivamente le voci di registro generate dalla patch e che la patch stessa vorrebbe tener nascoste.

    Un'altra dll che fa parte del pacchetto virulento è winkey.dll: i nomi delle funzioni esportate non lascia adito a dubbi

    Kisses_Mcafee
    Kisses_To_Trojanhunter
    installhook

    La dll tenta ovviamente di disabilitare il Mcafee e il Trojanhunter.

    Altra cosa da notare è che tutti i file malevoli sohanno l'atributo di sistema settato e sono stati paccati con UPX: è un attimo ottenere la versione originale unpacked con CFF Explorer

    La CWSandbox indentifica anche il trojan come il famoso ProRat;

    A questo punto ho nuovamente ripristinato lo stato del sistema guest in VMWare: in quest'ultima fase dell'analisi vado a rieseguire il tutto con l'antivirus attivo (il buon Nod32); reinstallo nuovamente la versione Trial di Ulead Gif Animator ed applico la patch: tacc ... è un attimo che Nod32 mi segnala il tentativo di installazione del trojan (e bravo Nod32 che hai fatto il tuo sporco lavoro).

    Come ultima cosa mi sembra doveroso segnalare l'indirizzo da cui è possibile scaricare la patch malandrina in questione (con l'obiettivo di starne lontano ovviamente)

    http://www.zshare.net/download/41132111e845bf (Patch che installa ProRat: tenere lontano come la peste!!!!!)

    Behh che dire: sempre un buon antivirus installato ed aggiornato, un buon firewall (Comodo Personal Firewall è ottimo ed è anche freeware), provare prima su VMWare (o VirtualBox, Virtual PC o altro ... fate voi) e soprattutto lanciare dentro Sandboxie.

    November 10

    La forza di 7zip

     

    Uso quasi sempre 7zip per comprimere i miei dati; Winrar consente una compressione molto rapida anche quando la si setta al livello massimo ed il risultato non si discosta di tanto rispetto a quello di 7zip (è solo leggermente inferiore) che richiede invece parecchio tempo in più per portare a termine la compressione; inoltre l'interfaccia grafica fornita da winrar è sicuramente più completa di quella fornita da 7zip; tuttavia anche se visto così Winrar potrebbe sembrare la scelta ideale (leggermente inferiore nel livello di compressione massimo raggiungibile ma con un esagerato vantaggio a livello di tempo rispetto a 7zip e con una GUI superiore), continuo a preferirgli 7zip: anzitutto perchè è una soluzione OpenSource e poi perchè consente di analizzare anche altri formati di compressione rispetto a Winrar. Il tutto è nato quando ho deciso di scaricarmi i sorgenti di 7zip

    7zip 4.42 sources

    Andando nella cartella "7zip\Archive" si ha un elenco di sottocartelle ognuna delle quali (fatta eccezione per la cartella "Common") contiene l'implementazione per la gestione del corrispondente formato di archiviazione

    7z
    Arj
    BZip2
    Cab
    Chm
    Cpio
    Deb
    Gzip
    Iso
    Lzh
    Nsis
    Rar
    Rpm
    Split
    Tar
    Z
    Zip

    Mi è caduto l'occhio soprattutto sui formati Chm (Html compilato ossia il formato di tanti libri) e Nsis (ossia il formato usato dal software Nullsoft Installer per la creazione di setup). Infatti si può vericare immediatamente come si possa ottenere il contenuto di un file chm (file .html, etc...) aprendolo con 7zip; la stessa cosa vale per gli eseguibili corrispondenti a setup creati col Nullsoft Installer: si possono ottenere i file contenuti nell'eseguibile del setup. Anche i formati Deb e Rpm  tipici dei setup nei sistemi Linux non sono male ... che dire ... W 7Zip.

    November 06

    Storie di musichine nei keygen, etc...

     

    A tutti è capitato di scaricarsi qualche keygen o crack per qualche programma e spesso il programmino in questione riproduce allegre canzoncine in MIDI. Tempo addietro mi ero scaricato da qualche meandro del web il keygen per Bitdefender Internet Security 10, per fare soprattutto diverse analisi. Il programmino si presenta nel seguente modo

    ha una musica in MIDI piuttosto accattivante; spesso e volentieri sono audio in formato XM: il modo migliore per spiegare brevemente il formato XM e la sua utilità è quello di far riferimento alle prime righe all'url seguente (materiale datato ma l'introduzione ai file XM è pur sempre efficace) 

    http://home.swipnet.se/~w-60986/index12.html

    What are XM files ?

    Almost everyone thinks of MIDI, when people are talking about creating music on a computer. But on most computers these files don't sound well, becouse the owners don't have the expensive equipment (synthesizer, wave-table soundard etc.) to play these files at the best. They hear only FM-Synthesized sounds, which sound like a old Commodore 64. There is a solution to it, the XM files. It all started with Mod files on the Commodore Amiga a couple of years ago. You must see it as Midi-files witht the sounds (samples) built in. So you can hear the real sounds at the right pitch. Mods had a few disadventages. You could only use 4 (and later 8) sounds at the same time, and samples were only 8 bits, so they did'nt sound good That's why a new standard came. The XM-Files. XM files can have up to 32 samples at the same time, in CD-Quality (44khz,16bit). There are also a few other good formats, like Impulse Tracker, but XM has become the standard.

    Una pagina decisamente ricca di info per capire di cosa si sta parlando è la seguente pagina di Wikipedia

    http://en.wikipedia.org/wiki/Tracker

    Tornando al nostro keygen, la prima cosa che ho voluto fare è stata quella di andare a vedere se vi era un file in formato XM incluso nelle risorse del programma. Il primo passo è stato quello di aprire l'eseguibile con CFF Explorer per analizzarlo ottenendo il seguente output

    Come si può notare l'eseguibile è packato con PECompact 2.0 o superiori. La prima cosa che bisogna fare è quindi quella di scompattarlo: la prima cosa che bisogna vedere è se esiste già un applicativo in grado di scompattare questo tipo di exe compressor. Un salto alla collezione raccolta ll'indirizzo

    http://dandan.us/Tools/

    sezione unPack poi PECompact e ci scarichiamo il file

    http://dandan.us/Tools/unPACK/PECompact/unpecompact2_02.rar

    lanciamo l'eseguibile in esso contenuto, selezione dell'exe che si vuol tentare di unpackare e viene unpackato correttamente. Bene, fatto ... senza sforzi abbiamo ora l'exe originale che andiamo a riaprire sempre con CFF Explorer ottenendo questa volta il seguente output

     

    Uhmm... interessante: la tipologia custom di risorsa denominata "XMMOD" lascia ben sperare che al suo interno si possa trovare sotto forma di risorsa il file XM che cerchiamo; infatti così è: la risorsa di nome "MUSIC" è appunto il file XM che viene riprodotto durante l'esecuzione del programma. Come si può notare dall'editor di risorsa (immagine sotto), il file XM è nel formato in chiaro (non è stato compresso e/o criptato altrimenti non si vedrebbero le sequenza di caratteri Extended Module oppure FastTracker 2.0 che rappresenta il programma con cui il .XM è stato creato)

    Pulsante destro del mouse sull'elemento "MUSIC" e sul menù contenstuale un click sulla voce "Save Resource (Raw)". Ok ci siamo salvati su disco questo benedetto file XM. Il modo più rapido per riprodurre un file audio in formato XM è quello di usare XMPlay : è andato tutto ok ed è bello sentire riprodotta in XMPlay la canzoncina originale.

    A questo punto l'interrogativo d'obbligo è il seguente: come faccio a riprodurre in un mio programma questo XM (o qualsiasi altro abbia tra le mani)? La risposta è data dalla libreria FMod: si tratta di un'ottima Audio Engine in grado di consentire la riproduzione in un programmi di svariati formati Audio tra i quali appunto anche il .XM; navigando nel sito si può vedere come siano diverse le soluzioni che vengono esposte: l'elenco dei download è all'indirizzo

    http://www.fmod.org/fmoddownload.html

    Degna di nota è la cosidetta MiniFMod : si tratta di una FMod minimale che consente solo ed unicamente la riproduzione di file .XM; viene rilasciata coi sorgenti in Visual C++ 6 ed il risultato del building è una .lib che aggiunge solo 5 K alle dimensioni del .exe; dal lato Delphi è stata realizzata una implementazione come .dll della MiniFMod da parte di Alex Demchenko che nel suo sito raccoglie materiale parecchio interessante. L'esempio fornito è ben fatto e dimostra come utilizzare la MiniFMOD.dll per riprodurre file .XM sia presenti su disco sia memorizzati come risorsa. Ho provato a riprodurre il .XM estrapolato dal keygen e tutto OK. Quindi s'ora in poi sarà un attimo avere una musichina accattivante riprodotta durante l'esecuzione del nostro programma.

    Vediamo ora qualcosa relativamente al reperimento sul web di file .XM:

    c'è chi ha costruito un sito totalmente dedicato ai file .XM riprodotti dai Keygen o dai crack, patch, etc...

    http://www.keygenmusic.net/

    Il sito già contiene un immenso elenco ben organizzato di file .XM ognuno corrispondente ad un determinato keygen o crack, patch, etc... Se poi non si trova quello che ci interessa si può inviare il keygen, crack, patch , etc.. all'autore che provvederà all'estrapolazione del .XM ed inserirlo nell'elenco.

    a quest'indirizzo poi c'è una bella collezione che raccoglie file .XM corrispondenti a tantissime canzoni famose

    http://modarchive.org/index_1.php

    Behh ... non resta che augurare un buon XM a tutti.

    November 03

    Parallelismi in celluloide

     

    Questo post ha poco a che vedere con il tema portante di questo Blog, del mio sito e del mio forum. Tuttavia mi piace troppo questo confronto tra 2 immagini prese rispettivamente da un leggendario film come Shining e la famosa serie televisiva Prison Break. Nella prima foto vediamo Jack Nicholson (Jack Torrence) nella celeberrima scena di Shining in cui dice "sono il lupo cattivo" e nella seconda invece c'è Theodore "T-Bag" Bagwell in uno dei primi episodi della prima stagione di Prison Break.

    Semplicemente fantastica ...

    Eliminazione di un file: arrivare all' api di base

     

    In questo post mi scollego solo temporaneamente col flusso di byte generato nei post precedenti per annotare una semplice informazione utile per programmi di monitoraggio. A volte mi capita di leggere nei forum la richiesta non rara di intercettare la cancellazione di un file e eventualmente annullarla (o in ogni caso loggare l'evento, etc...). Avrò guardato nei posti sbagliati ma non ho mai trovato qualcuno che abbia dato la risposta a queto semplice quesito (sicuramente ho cercato poco). Comunque la risposta è semplicissima: l'api più bassa che viene chiamata nell'ambito della procedura di eliminazione di un file è l'api Native (esportata da ntdll.dll) NtSetInfomationFile

    type

      FILE_INFORMATION_CLASS = (
        FileFiller0,
        FileDirectoryInformation, // 1
        FileFullDirectoryInformation, // 2
        FileBothDirectoryInformation, // 3
        FileBasicInformation, // 4  wdm
        FileStandardInformation, // 5  wdm
        FileInternalInformation, // 6
        FileEaInformation, // 7
        FileAccessInformation, // 8
        FileNameInformation, // 9
        FileRenameInformation, // 10
        FileLinkInformation, // 11
        FileNamesInformation, // 12
        FileDispositionInformation, // 13
        FilePositionInformation, // 14 wdm
        FileFullEaInformation, // 15
        FileModeInformation, // 16
        FileAlignmentInformation, // 17
        FileAllInformation, // 18
        FileAllocationInformation, // 19
        FileEndOfFileInformation, // 20 wdm
        FileAlternateNameInformation, // 21
        FileStreamInformation, // 22
        FilePipeInformation, // 23
        FilePipeLocalInformation, // 24
        FilePipeRemoteInformation, // 25
        FileMailslotQueryInformation, // 26
        FileMailslotSetInformation, // 27
        FileCompressionInformation, // 28
        FileObjectIdInformation, // 29
        FileCompletionInformation, // 30
        FileMoveClusterInformation, // 31
        FileQuotaInformation, // 32
        FileReparsePointInformation, // 33
        FileNetworkOpenInformation, // 34
        FileAttributeTagInformation, // 35
        FileTrackingInformation, // 36
        FileMaximumInformation);

      IO_STATUS_BLOCK = record
        Status: integer;
        Information: Cardinal;
      end;
      PIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;

      //tipologia dell'informazione passata
      //(dato puntato dal parametro FileInformation
      //di NtSetInformationFile)
      FILE_DISPOSITION_INFORMATION = record
        DeleteFile: Boolean; //True se si vuole eliminare il file
      end;
      PFILE_DISPOSITION_INFORMATION = ^FILE_DISPOSITION_INFORMATION;

    function  NtSetInformationFile(
        FileHandle : Cardinal; //handle al file
        IoStatusBlock : PIO_STATUS_BLOCK;
        //puntatore al record contenente le informazioni
        //che voglio settare sul file
        FileInformation : Pointer;
        FileInformationLength : Cardinal;
        FileInformationClass : FILE_INFORMATION_CLASS
      ): integer; stdcall; external 'ntdll.dll';

    Nel caso di eliminazione di un file, l'api NtSetInformationFile verrà chiamata con i seguenti parametri

    1) FileInformation punta ad un record di tipo FILE_DISPOSITION_INFORMATION con il campo DeleteFile settato a True

    2) FileInformationClass ha valore FileDispositionInformation (valore 13)

    Tutto qui: in un programma che esegue un hook system wide sull'api NtSetInformationFile, basta verificare se ci sono queste impostazioni ed allora significa che si sta effettuando la cancellazione di un file (il primo parametro ossia FileHandle è appunto l'handle a tale file). Per ottenere il nome del file con percorso completo a partire dall'handle si può usare il codice seguente 

    type

      OBJECT_INFORMATION_CLASS = (
        ObjectBasicInformation,
        ObjectNameInformation,
        ObjectTypeInformation,
        ObjectAllTypesInformation,
        ObjectHandleInformation);

      PUNICODE_STRING = ^UNICODE_STRING;
      UNICODE_STRING = record
        Length: word;
        MaximumLength: word;
        Buffer: pWideChar;
      end;

      OBJECT_NAME_INFORMATION = record
        Name: UNICODE_STRING;
      end;
      POBJECT_NAME_INFORMATION = ^OBJECT_NAME_INFORMATION;

    function NtQueryObject(
        ObjectHandle : Cardinal;
        ObjectInformationClass : OBJECT_INFORMATION_CLASS;
        ObjectInformation : Pointer;
        ObjectInformationLength : Cardinal;
        ReturnLength : pCardinal
      ): Integer; stdcall; external 'ntdll.dll'  

    function QueryDosDeviceA(
                 lpDeviceName: pAnsiChar;
                 lpTargetPath: pAnsiChar;
                 ucchMax: Cardinal
                 ): Cardinal; stdcall; external 'kernel32.dll'

    //dato un handle ad un file o ad una directory, ne resituisce il
    //percorso completo
    function DirNameFromHandle(dirHandle: THandle): string;
    const BUFSIZE = 1024;
    var
      pObjectNameInformation: POBJECT_NAME_INFORMATION;//Pointer;
      ObjectNameInformationLength: cardinal;
      NomeDir: string;
      pResponse: cardinal;
      rl: Cardinna;

      devName: string;
      x: Cardinal;
      DrvLetter: char;
      Drv: string;
    begin

      GetMem(pObjectNameInformation, 10000);
      NtQueryObject(dirHandle,
                    ObjectNameInformation,
                    pObjectNameInformation,
                    10000,
                    @rl);
      NomeDir := WideCharToString(pObjectNameInformation.Name.Buffer);
      Freemem(pObjectNameInformation);

      for DrvLetter:= 'A' to 'Z' do
        begin
          Drv:= DrvLetter+':';
          SetLength(devName, BufSize);
          x:= QueryDosDeviceA(pchar(Drv), pchar(devName), BufSize-1);
          SetLength(devName, x-2);
          if Pos(devName, NomeDir) <> 0 then
            begin
              NomeDir:= StringReplace(NomeDir, devName, Drv, []);
              break;
            end;
        end;

      result := NomeDir;

    end;

     L'utilizzo della NtSetInformationFile con i suddetti parametri in caso di cancellazione di un file è argomento trattato nel famoso libro Undocumented Windows Native API di Gary Nebbet. Tuttavia per questo e altre analisi sugli internals di Windows, una fonte di informazione di primaria importanza sono i sorgenti di ReactOS . La versione attuale (3 Novembre 2007) è la 0.3.3. Partendo dall'implementazione della CommandLine (cmd.exe) nella cartella base\shell\cmd, iniziando dal main in cmd.c si passa all'implementazione del comando del in del.c: tale implementazione chiama l'api win32 DeleteFile implementata in dll\win32\kernel32\file\delete.c ; l'implementazione è la seguente

    /* $Id: delete.c 21253 2006-03-08 21:33:04Z audit $
     *
     * COPYRIGHT:       See COPYING in the top level directory
     * PROJECT:         ReactOS system libraries
     * FILE:            lib/kernel32/file/delete.c
     * PURPOSE:         Deleting files
     * PROGRAMMER:      Ariadne (ariadne@xs4all.nl)
     * UPDATE HISTORY:
     *                  Created 01/11/98
     */

    /* INCLUDES ****************************************************************/

    #include <k32.h>

    #define NDEBUG
    #include "../include/debug.h"

    /* FUNCTIONS ****************************************************************/

    /*
     * @implemented
     */
    BOOL
    STDCALL
    DeleteFileA (
        LPCSTR    lpFileName
        )
    {
        PWCHAR FileNameW;

       if (!(FileNameW = FilenameA2W(lpFileName, FALSE)))
          return FALSE;

        return DeleteFileW (FileNameW);
    }

    /*
     * @implemented
     */
    BOOL
    STDCALL
    DeleteFileW (
        LPCWSTR    lpFileName
        )
    {
        FILE_DISPOSITION_INFORMATION FileDispInfo;
        OBJECT_ATTRIBUTES ObjectAttributes;
        IO_STATUS_BLOCK IoStatusBlock;
        UNICODE_STRING NtPathU;
        HANDLE FileHandle;
        NTSTATUS Status;

        DPRINT("DeleteFileW (lpFileName %S)\n",lpFileName);

        if (!RtlDosPathNameToNtPathName_U (lpFileName,
                                           &NtPathU,
                                           NULL,
                                           NULL))
       {
          SetLastError(ERROR_PATH_NOT_FOUND);
            return FALSE;
       }

        DPRINT("NtPathU \'%wZ\'\n", &NtPathU);

            InitializeObjectAttributes(&ObjectAttributes,
                                       &NtPathU,
                                       OBJ_CASE_INSENSITIVE,
                                       NULL,
                                       NULL);

        Status = NtCreateFile (&FileHandle,
                               DELETE,
                               &ObjectAttributes,
                               &IoStatusBlock,
                               NULL,
                               FILE_ATTRIBUTE_NORMAL,
                               FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                               FILE_OPEN,
                                   FILE_NON_DIRECTORY_FILE,
                               NULL,
                               0);

        RtlFreeHeap(RtlGetProcessHeap(),
                        0,
                        NtPathU.Buffer);

        if (!NT_SUCCESS(Status))
        {
            CHECKPOINT;
            SetLastErrorByStatus (Status);
            return FALSE;
        }

        FileDispInfo.DeleteFile = TRUE;

        Status = NtSetInformationFile (FileHandle,
                                       &IoStatusBlock,
                                       &FileDispInfo,
                                       sizeof(FILE_DISPOSITION_INFORMATION),
                                       FileDispositionInformation);
        if (!NT_SUCCESS(Status))
        {
            CHECKPOINT;
            NtClose (FileHandle);
            SetLastErrorByStatus (Status);
            return FALSE;
        }

        Status = NtClose (FileHandle);
        if (!NT_SUCCESS (Status))
        {
            CHECKPOINT;
            SetLastErrorByStatus (Status);
            return FALSE;
        }

        return TRUE;
    }

    /* EOF */

    Si vede chiaramente come il fulcro di tutto sia la chiamata a NtSetInformationFile con le impostazioni descritte in precedenza

    November 01

    Sandbox, etc...

     

    Sull'onda del precedente post in cui parlavo di virus, di servizi di analisi antivirus online, della Norman Sandbox, etc... butto giù altre cose. In questo post mi concentrerò principalmente sulle Sandbox ossia su quei sistemi che consentono di eseguire un programma ed ingabbiare tutto l'albero dei processi da esso generato catturando le varie operazioni dei medesimi. Soprattutto andremo a vedere altri servizi online che restituiscono report sulcomportamento di un eseguibile; analizzeremo in pratica tutti quei servizi online analoghi alla già citata Norman Sandbox.

    Anubis: Analyzing Unknown Binaries

    Link: http://analysis.seclab.tuwien.ac.at/index.php

    Questa Sandbox Online (progetto della Technical University of Vienna) è veramente formidabile: il livello di analisi che effettua sull'eseguibile che gli viene inviato è il più elevato tra tutti i prodotti di questo tipo; è interessante sottolineare che Anubis utilizza i seguenti prodotti:

    1) QEmu : virtualizzatore di sistemi operativi (prodotto dello stesso tipo di VMWare tanto per intenderci); il team di Anubis ha realizzato una versione personlizzata di QEmu (ricordiamo che QEmu è Open Source) per meglio catturare le operazioni del programma da anlizzare

    2) PEiD : famoso programma che ha come obiettivo principale quello di identificare il compilatore con cui è stato creato un eseguibile, il packer con cui è stato eventualmente compresso, il crypter con cui è stato eventualmente criptato; è freeware ma non Open Source.

    3) BRO : software freeware di monitoraggio del traffico di rete orientato principalmente al rilevamento di attività sospette: esegue il parsing dei pacchetti di rete e confronta i dati con i pattern nel proprio database che corrispondono a potenziali attività malevole.

    4) Sigbuster: tool multipiattaforma per identificare il fatto che un eseguibile è stato compresso; non l'ho trovato da nessuna parte però sono molto interessanti il blog dell'autore ed anche il suo forum

    Per quanto riguarda l'utilizzo, è analogo a quelle di tutti gli altri servizi dello stesso tipo: una pagina web contenente una maschera di upload in cui selezioni l'eseguibile locale che vuoi inviare per l'analisi e un tuo indirizzo email; in men che non si dica ti arriverà via email un messaggio contenete un link al quale vi è il report dettagliatissimo del comportamento dell'eseguibile. E' anche possibile non stare a specificare alcun email ed in tal caso si rimarrà in attesa della visualizzazione della pagina col report. Personalmente preferisco l'utilizzo dell'email. Come test ho usato il virus già descritto al post precedente sia nella sua versione orginale sia nella versione criptata col mio semplice exe crypter.

    Report Virus Originale

    Report Virus Critpato

    Come si può vedere, il report restituito da Anubis è molto ma mooolto dettagliato. Nel sito di Anubis c'è anche una sezione in cui viene fatto un confronto tra il prodotto ed altri 2 prodotti analoghi (la già citata e sperimentata Norman Sandbox e CWSandbox) e viene evidenziato come Anubis sia lo strumento che esegue l'analisi più completa (chiaramente bisogna provare sempre tutte le soluzioni, un report comparativo spesso fa riferimento solo a determinati elementi venendo meno in completezza, e poi non sempre è facile stabilire la superiorità globale di una soluzione su un'altra) 

    http://analysis.seclab.tuwien.ac.at/features.php

     

    CWSandbox

    Link: http://www.cwsandbox.org/

    Si tratta di un progetto della University of Mannheim; nella sua main page, viene sottolineato il fatto che il profiling dell'eseguibile durante la sua esecuzione (quindi tutto ciò che fa lui e l'eventuale albero di processo che ad esso fa capo) viene realizzato tramite api hooking (del resto è la cosa più immediata da pensare): viene caricato il processo mappandogli nello spazio di memoria una dll che implementa api hooking sulle api win32 responsabili della gestione del file system, del registro e di quant'altro. I dettagli tecnici (poca roba) sono all'indirizzo

    http://luigi.informatik.uni-mannheim.de/new/home.php?id=technical-details

    Anche in questo caso, il submit consiste in una semplicissima form di invio che richiede di selezionare l'eseguibile locale e specificare un indirizzo email al quale verrà mandato il report

     

    ThreatExpert

    Link: http://www.threatexpert.com

    Altro servizio Online di profiling di un eseguibile; fornisce parecchi servizi

    1) Submit : inviare il nostro .exe e ricevere un resoconto dettagliato del suo comportamento fornisce anche la possibiltà di inviare il nostro  .exe afficheè venga scansionato per essere identificato o meno come elemento malevolo; il report viene inviato via email sotto forma di allegato: l'allegato è un file .zip con password, la password è scritta nel messaggio. Il contenuto del .zip è un file .mhtml (apribile con Internet Explorer) che contiene il report dell'analisi. L' analisi non è molto dettagliata (lontana da Anubis) ma è superiore a quella fornita dalla Norman Sandbox

    2) File Scanner : consente di inviare il nostro .exe e farlo poi scansionare per verificare se corrisponde ad un virus (o a qualsiasi altro elemento malevolo conosciuto)

    3) Side-Effect Scanner : consente di inviare il nome di un file con percorso completo oppure il nome di una chiave di registro sempre con percorso completo, o un Url o un ClassId (GUID enumerati come sottochiave della chiave di registro HKey_Classes_Root\Software\Classes) e far verificare se fa parte di un virus.  

    4) Contiene un database con tutto il malware conosciuto raggruppato per iniziale del nome e per categoria e con la possibilità di fare ricerche, disponendo anche di una mappa mondiale per indicare l'origine geografica del malware

    I vari servizi sono facilmente accessibili tramite il seplice ed intuitivo menù.

     

    JoeBox

    Link: http://www.joebox.org 

    Questo è il progetto di un singolo, uno dei tanti programmatori appassionati che condividono con il pubblico del web le loro creazioni; all'indirizzo http://www.joebox.org/articles.php l'autore fa una bella analisi dei sistemi sandbox prendendo in esame oltre alla sua soluzione anche le 2 precedenti (ossia Anubi e CWSandbox) e confrontandole tra loro: da leggere assolutamente! (come del resto anche le altre pagine del sito. Non viene fornito alcun servizio o software da scaricare: l'autore parla della sua Sandbox (senza entrare mai nei dettagli) e nel suo forum ci sono discussioni interessanti come ad esempio i sorgenti delle proceddure realizzate dall'autore per identificare se il sistema operativo in cui è in esecuzione l'eseguibile corrente, è emulato in VMWare, in Virtual PC, in Virtual Box o QEmu. Più in generale, nel forum l'autore approfondisce il concetto di SandBox Detection; in pratica i servizi di Sandbox di cui stiamo parlando consentono di definire nel dettaglio il comportamento di un .exe. Se però si riesce a trovare il modo di identificare che il nostro exe sta girando in una Sandbox, allora si potrebbe realizzare una procedura da chiamare all'avvio del programma che, in caso di rilevamento di esecuzione in Sandbox, termina immediatamente il programma stesso. In questo caso il report della Sandbox consisterà in nulla non dandoci quindi informazioni sul comportamento del programma. Una volta eseguito normalmente (non in una Sandbox) il programma invece funzionerebbe e farebbe il suo sporco lavoro. Un'altra cosa potrebbe essere quella di eliminare gli hook imposti dalla Sandbox; tutti questi concetti vengono esaminati con esempi di codice nel forum 

     

    Vabè, per il momento chiudiamo ma tornerò a parlare presto di queste cose con altri prodotti ed altri concetti anessi e connessi