Se lavorate nel campo dell’informatica da tempo, saprete di certo che Microsoft è solita distribuire molti strumenti software di utilizzo comune in pacchetti corposi, che talvolta occupano oltre 4 GB di spazio. È il caso di ADK – Assessment and Deployment Kit, un insieme di strumenti Microsoft destinato agli amministratori IT e professionisti del deployment di Windows; SDK – Software Development Kit, una raccolta di strumenti Microsoft destinati agli sviluppatori software.
Un software di utilizzo comune come OSCDIMG permette di creare immagini ISO ma ancora oggi è un vero mistero di come gli utenti siano costretti a dover scaricare un pacchetto di dimensioni importanti come ADK se interessati a quell’unico software.
Cos’è il server dei simboli Microsoft e come funziona
Pete Batard, sviluppatore della nota utilità Rufus, ha recentemente scoperto un modo per scaricare programmi come OSCDIMG dai server Microsoft senza scaricare pacchetti pesanti.
L’ideatore di Rufus ha scoperto che è possibile effettuare il download dal Microsoft Symbol Server, un servizio online che fornisce automaticamente simboli di debug e, in alcuni casi, i file binari originali (EXE, DLL, SYS) dei prodotti dell’azienda di Redmond, principalmente di Windows e dei suoi strumenti di sviluppo.
Quando un programma viene compilato in C/C++ o in altri linguaggi nativi, il file eseguibile (.exe
o .dll
) contiene solo codice macchina e indirizzi di memoria. I cosiddetti simboli (contenuti nei file .pdb
, Program Database) permettono al debugger di:
- Tradurre indirizzi di memoria in nomi di funzioni, variabili e linee di codice.
- Analizzare crash dump e stack trace.
- Navigare il codice sorgente in modo leggibile.
Microsoft organizza tutti i simboli e i binari relativi ai suoi software in un archivio strutturato accessibile pubblicamente tramite URL (msdl.microsoft.com/download/symbols
). Quando un debugger (ad esempio WinDbg o Visual Studio) incontra un modulo senza simboli provvede ad estrarre i metadati necessari (nome del file, timestamp di compilazione, dimensione o GUID), costruisce automaticamente un URL per richiedere il file corretto al server dei simboli Microsoft e infine scarica il simbolo o il binario nella cache locale.
Come scaricare qualunque file introvabile dai server Microsoft
Batard si è accorto che chiunque può generare un URL compatibile con il formato richiesto dal Microsoft Symbol Server per scaricare file normalmente non distribuiti pubblicamente.
Il formato standard per i PE sul Microsoft Symbol Server è il seguente:
msdl.microsoft.com/download/symbols/<NomeFile>/<TimeDateStamp><ImageSize>/<NomeFile>
Supponendo di voler effettuare il download di OSCDIMG dal server dei simboli Microsoft:
NomeFile: oscdimg.exe
TimeDateStamp: 688CABB0
SizeOfImage: 65000
L’URL diventa quindi (anteporre https://
):
msdl.microsoft.com/download/symbols/oscdimg.exe/688CABB065000/oscdimg.exe
È esattamente lo stesso meccanismo usato automaticamente dai debugger citati in precedenza quando devono scaricare binari o simboli per le attività di debugging.
Il bello che utilizzando lo strumento Microsoft dumpbin
è possibile estrarre informazioni analoghe per qualunque file:
dumpbin oscdimg.exe /headers | find "time date stamp"
dumpbin oscdimg.exe /headers | find "size of image"
Può un malware BlackLotus essere fonte di ispirazione?
Abbiamo detto spesso che gli sviluppatori di malware evoluti usano di frequente tecniche innovative. BlackLotus è un UEFI bootkit, il primo malware noto in grado di infettare un computer prima che il sistema operativo si avvii, anche se Secure Boot e tutte le protezioni di Windows 10/11 sono attive e aggiornate.
Proprio BlackLotus usava una tecnica interessante: invece di includere direttamente tutti i file necessari, scaricava file binari ufficiali Microsoft direttamente dai Microsoft Symbol Server. In questo modo riduceva la sua rilevabilità e le dimensioni del malware stesso. Poteva inoltre scegliere quali versioni dei file scaricare secondo il bisogno, sfruttando eventuali vulnerabilità non corrette.
Batard rivela che anche quell’approccio utilizzato da BlackLotus ha fatto scuola ed è oggi utilizzabile per scaricare, con un minimo di lavoro, qualunque file dai server Microsoft con una procedura veloce, sicura e trasparente.
Note finali
Anziché usare il comando dumpbin
, che è parte integrante di Visual Studio ed è composto da diversi file (tutti a loro volta eventualmente scaricabili tramite il Microsoft Symbol Server), si può eventualmente ricorrere allo script Python realizzato dallo stesso Batard e pubblicato nella pagina linkata in precedenza. Lo script riceve in input il nome del file, che deve essere memorizzato sul sistema locale.
Infine, se il Microsoft Symbol Server restituisse un file .blob
, è sufficiente rinominarlo con il nome del file atteso.