Naar aanleiding van [rml][ Centraal] Discussie onderwerpen[/rml] wil ik hier een discussie starten over de veiligheid van deze twee webservers. Aangezien mijn kennis vooral bij IIS ligt, zal ik hier uitleggen waarom ik denk dat IIS veiliger is. Aan de Apache gebruikers om aan te tonen waarom "hun" webserver veiliger is.
Ik zal hier uitgaan van IIS 6, de versie van Internet Information Services die in Windows 2003 zit. Het grootste pluspunt van IIS 6 in Windows 2003 is dat het standaard niet eens geïnstalleerd is. Dit was namelijk het grootste gevaar van NT en 2000: als je tijdens de setup maar op Next bleef rammen werd IIS direct mee geïnstalleerd. Nu is dit heel handig als je toch een webserver aan het inrichten bent, maar dat was meestal niet het geval. Vervolgens zat je dus met een niet al te veilige webserver die dankzij een aantal absurde exploits volledige toegang tot je systeem verschafte. Dat is nu anders.
Windows 2003 is na een installatie compleet "kaal". Er is nog niets geïnstalleerd, er draaien nog geen services en de server kan volledig op maat gemaakt gaan worden.
Hetzelfde principe loopt door als je IIS gaat installeren. Als je enkel en alleen IIS aanklikt krijg je een webserver die niets anders doet dan statische webpagina's serveren. Geen FTP toegang, geen handige beheerscripts, geen fratsen. Wil je dan toch van één van deze mogelijkheden gebruik maken, dan zul je het zelf aan moeten zetten. Je kunt o.a. FTP, SMTP en NNTP functionaliteit toevoegen, maar ook ondersteuning voor ASP, ASP.NET en SSI. Dit alles zijn keuzes, je zet ze dus bewust aan. Geen verborgen processen meer waarvan je niet wist dat ze draaiden totdat ze geëxploit werden.
Net als de "standaard" IIS installatie zijn ook al deze toevoegingen standaard zo veilig mogelijk geconfigureerd. FTP biedt enkel lees rechten, SMTP zit dicht (dus geen open relay) en IIS heeft een Default Application pool met beperkte rechten. En dat laatste is naar mijn mening het mooiste van IIS: application pools.
Waar normaal gesproken een webserver één proces is dat één of meer websites kan aanbieden, bestaat IIS uit zogeheten "worker processes". Een worker process is één taak of thread die de pagina's parst, en doorstuurt naar de client. Deze worker processes vallen binnen zogeheten application pools. Oftewel, een verzameling applicaties. Voor deze applicaties kun je via zo'n pool naast zaken zoals het maximale geheugengebruik ook instellen onder welke user account ze moeten draaien. Dit laatste biedt natuurlijk fantastische mogelijkheden. Normaal gesproken draait IIS onder de zogeheten Network Service account. Dit is een account met enkel leesrechten op de default documentroot van IIS (C:\Inetpub\wwwroot). Heb je nu een applicatie die meer rechten nodig heeft, of bijvoorbeeld ook toegang nodig heeft tot een andere server, dan kun je dus een application pool aanmaken waarvan de worker processes onder deze account draaien. Als je nu een website (een applicatie) in deze application pool zet, beschikt deze dus over de mogelijkheden die deze account biedt, maar ook niets meer. Je kunt met IIS 6 dus per website, per gebruiker, per map en zelfs per pagina aangeven wat er mag gebeuren. Je hebt totale controle over je webserver.
Nog een pluspunt van deze gescheiden gebruikers per website is dat als een van je websites "gehacked" wordt, en er bijvoorbeeld SQL injecties worden uitgevoerd op je MSSQL server, dat deze nooit een andere database zouden kunnen bereiken. Je geeft de gebruiker van een website immers enkel en alleen rechten op zijn eigen database. Een website kan dan nooit verbinding maken met een andere database, tenzij je de gebruiker hier toestemming voor geeft. Ditzelfde werkt natuurlijk ook als het gaat om rechten op mappen e.d., een database is enkel één van de vele mogelijkheden.
Dit zijn slechts een aantal punten die IIS zo'n ontzettende goede webserver maken. Nu zijn de Apache gebruikers aan de beurt om van zich te laten horen
Ik zal hier uitgaan van IIS 6, de versie van Internet Information Services die in Windows 2003 zit. Het grootste pluspunt van IIS 6 in Windows 2003 is dat het standaard niet eens geïnstalleerd is. Dit was namelijk het grootste gevaar van NT en 2000: als je tijdens de setup maar op Next bleef rammen werd IIS direct mee geïnstalleerd. Nu is dit heel handig als je toch een webserver aan het inrichten bent, maar dat was meestal niet het geval. Vervolgens zat je dus met een niet al te veilige webserver die dankzij een aantal absurde exploits volledige toegang tot je systeem verschafte. Dat is nu anders.
Windows 2003 is na een installatie compleet "kaal". Er is nog niets geïnstalleerd, er draaien nog geen services en de server kan volledig op maat gemaakt gaan worden.
Hetzelfde principe loopt door als je IIS gaat installeren. Als je enkel en alleen IIS aanklikt krijg je een webserver die niets anders doet dan statische webpagina's serveren. Geen FTP toegang, geen handige beheerscripts, geen fratsen. Wil je dan toch van één van deze mogelijkheden gebruik maken, dan zul je het zelf aan moeten zetten. Je kunt o.a. FTP, SMTP en NNTP functionaliteit toevoegen, maar ook ondersteuning voor ASP, ASP.NET en SSI. Dit alles zijn keuzes, je zet ze dus bewust aan. Geen verborgen processen meer waarvan je niet wist dat ze draaiden totdat ze geëxploit werden.
Net als de "standaard" IIS installatie zijn ook al deze toevoegingen standaard zo veilig mogelijk geconfigureerd. FTP biedt enkel lees rechten, SMTP zit dicht (dus geen open relay) en IIS heeft een Default Application pool met beperkte rechten. En dat laatste is naar mijn mening het mooiste van IIS: application pools.
Waar normaal gesproken een webserver één proces is dat één of meer websites kan aanbieden, bestaat IIS uit zogeheten "worker processes". Een worker process is één taak of thread die de pagina's parst, en doorstuurt naar de client. Deze worker processes vallen binnen zogeheten application pools. Oftewel, een verzameling applicaties. Voor deze applicaties kun je via zo'n pool naast zaken zoals het maximale geheugengebruik ook instellen onder welke user account ze moeten draaien. Dit laatste biedt natuurlijk fantastische mogelijkheden. Normaal gesproken draait IIS onder de zogeheten Network Service account. Dit is een account met enkel leesrechten op de default documentroot van IIS (C:\Inetpub\wwwroot). Heb je nu een applicatie die meer rechten nodig heeft, of bijvoorbeeld ook toegang nodig heeft tot een andere server, dan kun je dus een application pool aanmaken waarvan de worker processes onder deze account draaien. Als je nu een website (een applicatie) in deze application pool zet, beschikt deze dus over de mogelijkheden die deze account biedt, maar ook niets meer. Je kunt met IIS 6 dus per website, per gebruiker, per map en zelfs per pagina aangeven wat er mag gebeuren. Je hebt totale controle over je webserver.
Nog een pluspunt van deze gescheiden gebruikers per website is dat als een van je websites "gehacked" wordt, en er bijvoorbeeld SQL injecties worden uitgevoerd op je MSSQL server, dat deze nooit een andere database zouden kunnen bereiken. Je geeft de gebruiker van een website immers enkel en alleen rechten op zijn eigen database. Een website kan dan nooit verbinding maken met een andere database, tenzij je de gebruiker hier toestemming voor geeft. Ditzelfde werkt natuurlijk ook als het gaat om rechten op mappen e.d., een database is enkel één van de vele mogelijkheden.
Dit zijn slechts een aantal punten die IIS zo'n ontzettende goede webserver maken. Nu zijn de Apache gebruikers aan de beurt om van zich te laten horen