Ho trovato su del.icio.us un link che porta ad una interessante ricerca condotta da Richard Stiennon e pubblicata sul suo blog presso ZDnet (le immagini sono state realizzate e fornite da Sana Security).
Lo scopo di questa ricerca è definire un metro di paragone per giudicare la sicurezza di un server http su linux (utilizzando Apache) e su Windows Server (utilizzando IIS). Il metro di giudizio, secondo Stiennon, potrebbe essere identificato nel numero e nella complessità delle relazioni tra le chiamate di sistema che vengono fatte al fine di produrre il risultato (in questo caso, la pagina HTML da spedire al browser). Le chiamate di sistema infatti, sono quelle che espongono a problemi il sistema a fronte di un bug nel webserver, in quanto sono quelle che consentono di portare a buono fine un attacco di tipo (ad esempio) buffer overflow.
Per verificare questa teoria, Sana Security ha mappato un grafico di complessità relativo ai due sistemi, ed ecco cosa ne emerge. La prima immagine (in alto) si riferisce alle chiamate di sistema che Apache fa al kernel Linux a fronte di una richiesta. Qui a fianco invece, vediamo il grafico relativo alle chiamate portate dal webserver Microsoft IIS ad un sistema Windows Server.
La differenza di complessità può lasciare davvero sbalorditi e portare ad affermare che “Linux è piu sicuro di Windows”, ma ci sono da fare un paio di precisazioni molto importanti da questo punto di vista.
- Stiamo facendo riferimento ad server web. Non si deve assolutamente generalizzare prendendolo come paragone per l’intero sistema.
- Non abbiamo a disposizione particolari riferimenti riguardo alle modalità con cui quei grafici sono stati generati. Non sappiamo ad esempio se si tratta di una semplice richiesta di una pagina HTML o dell’elaborazione di uno script PHP che interagendo con MySQL porta alla produzione di tale pagina (il primo caso essendo sicuramente meno vulnerabile ad attacchi di tipo buffer overflow, non potendo introdurre codice arbitrario). Allo stesso modo non abbiamo riferimenti sulle versioni dei software utilizzati.
Fatte le debite precisazioni, cerchiamo di cavare qualcosa di buono da quanto “scoperto”.
Possiamo dire che la complessità del server web IIS è davvero spaventosa. Mi chiedo da chi sia stato progettato, sembra tutto fuorchè modulare (un webserver della complessità di IIS o Apache è sicuramente terreno adatto all’applicazione delle teorie di Ing. del Software).
Al di la del maggior numero di chiamate di sistema che questo pastruglio lo porta a fare, mi immagino un codice piuttosto spaghettizzato, e sicuramente piu difficilmente mantenibile rispetto a quello che potrebbe essere il codice di Apache.
Leggendo poi tra i commenti al post di Stiennon, mi sono imbattuto nell’affermazione che Apache è stato maggiormente violato rispetto a IIS secondo le classifiche di Zone-H. Potendo con buona approssimazione considerare il citato documento come attendibile (nonostante si riferisca a quanto accaduto durante l’anno 2005, in quanto le statistiche del 2006 non sono ancora disponibili), dobbiamo però notare che l’autore del commento ignora completamente il fatto che fin dal 2004 la stragrande maggioranza degli attacchi vengono condotti a livello applicativo, quindi nei confronti di PHP e MySQL quindi, o ASP e MsSQL (a pagina 17 delle citate statistiche trovate le percentuali relative alle tipologie di attacco), indipendentemente dal webserver installato.
Anche nel merito, però, l’autore del commento sbaglia. Osservando la pagina 14 del pdf infatti, notiamo che i due server web sono in sostanziale parità.
Inoltre, Apache è largamente piu diffuso di IIS sul web. Secondo le statistiche di febbraio di NetCraft.com, nonostante sia in letterale caduta libera (argomento sul quale ci sarebbero da fare profonde riflessioni), Apache detiene ancora quasi il 59% del mercato dei WebServer, mentre IIS di Microsoft si attesta intorno al 31%. Questo rende 2 volte piu probabile imbattersi in un webserver Apache che in un webserver IIS, e ciò spiega (in parte) il maggior numero di violazioni segnalate su piattaforme su cui è installato Apache.
In piu, c’è da dire che le statistiche di Zone-H vengono elaborate sulla base degli attacchi segnalati, ma (come dicevo) non tutti gli attacchi sono condotti direttamente nei confronti del webserver. Con un attacco di tipo SQL Injection, poco c’entra il tipo di webserver utilizzato. Oltretutto mentre Apache è disponibile anche su piattaforme Microsoft Windows, IIS non è disponibile su piattaforme Linux, quindi i dati sono ancora meno ricollegabili alla reale sicurezza dei due sistemi operativi.
Piu senso avrebbe quindi riferirsi al tipo di piattaforma che ospita il webserver (questo non elimina però il discorso legato alla metodologia di attacco, che spesso e volentieri non coinvolge direttamente ne il webserver ne tantomeno il sistema operativo), ed osservando questo dato sulle statistiche relative al 2005 fornite da Zone-H (attendo con ansia quelle relative al 2006), emerge una sostanziale parità tra i sistemi Windows ed i sistemi Linux.
Nel quadro complessivo, a mio avviso, l’unica cosa seria che possiamo dire è che IIS è estremamente piu complesso di Apache (almeno per quel che riguarda le versioni prese in considerazione), e le uniche conclusioni che si possono da questo estrapolare, sono probabilmente legate alla maggior difficoltà di manutenzione del software, ma anche, tutto sommato, la maggior messa a disposizione di risorse agli attaccanti (precisando naturalmente che per sfruttare queste risorse sono necessarie ben piu gravi violazioni ai servizi dei livelli superiori).