Samenvatting
In dit artikel wordt stapsgewijs beschreven hoe u het hulpprogramma URLScan configureert om een webserver te beschermen tegen aanvallen en misbruik.
terug naar begin URLScan installeren
Als u meer informatie wilt over het installeren van URLScan, klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
315522 HOW TO: Extract the URLScan Tool and Lockdown Template Files from the IIS Lockdown Tool
307608 INFO: Availability of URLScan Version 2.5 Security Tool
terug naar begin Het bestand URLScan.ini wijzigen
U configureert URLScan via het bestand URLScan.ini, dat zich bevindt in de map %WINDIR%\System32\Inetsrv\URLscan. Open dit bestand in een teksteditor zoals Kladblok, voer de gewenste wijzigingen door en sla het bestand op.
Opmerking: de wijzigingen worden van kracht nadat u IIS opnieuw start. U kunt dit snel doen door de opdracht
IISRESET uit te voeren via een opdrachtprompt.
Het bestand URLScan.ini bevat de volgende secties:
- [Options]: in deze sectie worden algemene URLScan-opties beschreven.
- [AllowVerbs] en [DenyVerbs]: deze secties bevatten de woorden, ook wel HTTP-methoden genoemd, die in URLScan worden toegestaan.
- [DenyHeaders]: deze sectie bevat de HTTP-headers die niet worden toegestaan in een HTTP-verzoek. Als een HTTP-verzoek een HTTP-header bevat die in deze sectie is opgenomen, wordt het verzoek geweigerd in URLScan.
- [AllowExtensions] en [DenyExtensions]: deze secties bevatten de bestandsextensies die in URLScan worden toegestaan.
- [DenyURLSequences]: deze sectie bevat de tekenreeksen die niet worden toegestaan in een HTTP-verzoek. HTTP-verzoeken met een tekenreeks die in deze sectie is opgenomen, worden geweigerd in URLScan.
In dit document wordt elke sectie uitvoeriger beschreven.
terug naar begin De sectie [Options]
In de sectie
[Options] kunt u een aantal URLScan-opties configureren. Elke regel in deze sectie heeft de volgende indeling:
U kunt voor de volgende opties de volgende waarden instellen:
- UseAllowVerbs=1
Standaard is deze optie ingesteld op 1. Als deze optie is ingesteld op 1, worden in URLScan alleen HTTP-verzoeken toegestaan die de woorden bevatten die zijn opgenomen in de sectie [AllowVerbs]. Verzoeken die deze woorden niet bevatten, worden geblokkeerd. Als deze optie is ingesteld op 0, wordt de sectie [AllowVerbs] genegeerd en worden alleen verzoeken geblokkeerd die woorden bevatten die zijn opgenomen in de sectie [DenyVerbs]. - UseAllowExtensions=0
Standaard is deze optie ingesteld op 0. Als deze optie is ingesteld op 0, worden verzoeken voor bestandsextensies in URLScan geblokkeerd als deze zijn opgenomen in de sectie [DenyExtensions]. Verzoeken voor andere bestandsextensies worden toegestaan. Is deze optie ingesteld op 1, dan worden in URLScan alleen verzoeken voor bestandsextensies toegestaan die zijn opgenomen in de sectie [DenyExtensions]. Verzoeken voor andere bestanden worden geblokkeerd. - NormalizeUrlBeforeScan=1
IIS ontvangt verzoeken die URL-gecodeerd zijn. Dit betekent dat bepaalde tekens kunnen worden vervangen door een percentageteken (%) en een bepaald nummer. De codering %20 komt bijvoorbeeld overeen met een spatie. Een verzoek voor http://myserver/My%20Dir/My%20File.htm komt dus overeen met een verzoek voor http://myserver/My Dir/My File.htm. Het proces waarbij URL-gecodeerde verzoeken worden gedecodeerd, wordt normalisatie genoemd. Standaard is deze optie ingesteld op 1. Als de optie NormalizeUrlBeforeScan is ingesteld op 1, wordt het gedecodeerde verzoek geanalyseerd in URLScan. Is de optie opgesteld op 0, dan wordt het ongecodeerde verzoek geanalyseerd in URLScan. Als u deze optie instelt op 0, kunnen bepaalde aanvallen niet worden geblokkeerd in URLScan. - VerifyNormalization=1
Omdat het percentageteken (%) ook URL-gecodeerd kan zijn, kan een hacker een geavanceerd verzoek indienen dat dubbel gecodeerd is. Als dit gebeurt, worden in IIS mogelijk verzoeken geaccepteerd die in andere gevallen als ongeldig worden geweigerd. Standaard is deze optie ingesteld op 1. Als de optie VerifyNormalization op 1 is ingesteld, wordt de URL twee keer genormaliseerd in URLScan. Is de URL na de eerste en tweede normalisatie niet identiek, dan wordt het verzoek geweigerd. Met deze instelling kunnen aanvallen met dubbel gecodeerde verzoeken geen schade aanrichten. - AllowHighBitCharacters=0
Standaard is deze optie ingesteld op 0. Als deze optie is ingesteld op 0, worden in URLScan verzoeken geweigerd die niet-ASCII-tekens bevatten. Zo worden bepaalde soorten aanvallen voorkomen, maar kunnen tevens verzoeken voor bepaalde geldige bestanden, zoals bestanden met niet-Engelse namen, worden geblokkeerd. - AllowDotInPath=0
Standaard is deze optie ingesteld op 0. Als deze optie is ingesteld op 0, worden in URLScan verzoeken geweigerd die meerdere punten (.) bevatten. Zo wordt voorkomen dat verzoeken voor gevaarlijke bestandsextensies kunnen worden verborgen door een veilige bestandsextensie in de padinformatie of de queryreeks van de URL op te nemen. Als deze optie is ingesteld op 1, kan in URLScan een verzoek voor http://servername/BadFile.exe/SafeFile.htm worden toegestaan omdat dit een verzoek voor een HTML-pagina lijkt terwijl het een verzoek voor een uitvoerbaar bestand (.EXE) is met de naam van een HTML-pagina in het gedeelte PATH_INFO. Is deze optie ingesteld op 0, dan worden in URLScan mogelijk ook verzoeken geweigerd voor mapnamen die punten bevatten. - RemoveServerHeader=0
Standaard wordt in de header van alle antwoorden van een webserver aangegeven welke webserversoftware wordt gebruikt. Dit kan de kwetsbaarheid van de server verhogen omdat een hacker hierdoor weet wanneer IIS wordt gebruikt en in dat geval kan inspelen op bekende IIS-problemen. Standaard is deze optie ingesteld op 0. Als u de optie RemoveServerHeader instelt op 1, voorkomt u dat de server in antwoorden de header opneemt waaruit blijkt dat het een IIS-server betreft. Stelt u RemoveServerHeader in op 0, dan wordt deze header wel in antwoorden opgenomen. - AlternateServerName=(niet standaard opgegeven)
Als RemoveServerHeader is ingesteld op 0, kunt u bij de optie AlternateServerName een tekenreeks opgeven die als header moet worden weergegeven in serverantwoorden. Stelt u RemoveServerHeader in op 1, dan wordt deze optie genegeerd. - EnableLogging=1
Standaard wordt in URLScan een volledig logboek van alle geblokkeerde verzoeken bijgehouden in de map %WINDIR%\System32\Inetsrv\URLScan. U kunt EnableLogging instellen op 0 als u geen logboek wilt bijhouden. - PerProcessLogging=0
Standaard is deze optie ingesteld op 0. Als deze optie is ingesteld op 1, wordt in URLScan een apart logboek gemaakt voor elk proces dat als host optreedt voor URLScan.dll. Is deze optie ingesteld op 0, dan worden alle processen in hetzelfde logboek geregistreerd. - PerDayLogging=1
Standaard is deze optie ingesteld op 1. Als deze optie is ingesteld op 1, wordt elke dag een nieuw logboekbestand gemaakt. Elk logboekbestand krijgt de naam Urlscan.MMDDJJ.log, waarbij MMDDJJ staat voor de datum waarop het logboekbestand is gemaakt. Als deze waarde is ingesteld op 0, worden alle gebeurtenissen in één logboekbestand opgeslagen, ongeacht de datum waarop deze gebeurtenissen plaatsvinden. - AllowLateScanning=0
Standaard is deze optie ingesteld op 0. Als deze optie is ingesteld op 0, wordt URLScan uitgevoerd als een filter met hoge prioriteit, wat betekent dat URLScan eerder wordt uitgevoerd dan andere ISAPI-filters (Internet Server Application Programming Interface) die op de server zijn geïnstalleerd. Is deze optie ingesteld op 1, dan wordt URLScan uitgevoerd als een filter met lage prioriteit, zodat de URL door andere filters kan worden gewijzigd voordat met URLScan analyses worden uitgevoerd. Voor FrontPage-serverextensies (FPSE) is vereist dat deze optie is ingesteld op 1. - RejectResponseUrl=(niet standaard opgegeven)
Met deze optie geeft u het virtuele pad op naar een bestand dat wordt uitgevoerd wanneer in URLScan een verzoek wordt geblokkeerd. Hiermee kunt u het antwoord aanpassen dat naar de client wordt verzonden wanneer een verzoek wordt geblokkeerd. U moet RejectResponseUrl opgeven als een virtueel pad naar het betreffende bestand, bijvoorbeeld /Path/To/RejectResponseHandler.asp. U kunt een bestand opgeven dat in URLScan standaard wordt geblokkeerd, zoals een ASP-pagina (Active Server Pages). U kunt ook de volgende serverviariabelen van de pagina gebruiken:- HTTP_URLSCAN_STATUS_HEADER: hiermee geeft u op waarom het verzoek is geblokkeerd.
- HTTP_URLSCAN_ORIGINAL_VERB: hiermee geeft u het oorspronkelijke woord uit het geblokkeerde verzoek op, bijvoorbeeld GET, POST, HEAD of DEBUG.
- HTTP_URLSCAN_ORIGINAL_URL: hiermee geeft u de oorspronkelijke URL uit het geblokkeerde verzoek op.
Als u voor RejectResponseUrl de speciale waarde /~* instelt, wordt in URLScan alleen de logboekmodus gebruikt. In dat geval worden alle verzoeken in IIS behandeld, maar wordt er een vermelding in het URLScan-logboek opgenomen voor elk verzoek dat doorgaans wordt geblokkeerd. U kunt deze instelling gebruiken wanneer u het bestand URLScan.ini wilt testen.
Als u geen waarde voor RejectResponseUrl opgeeft, wordt in URLScan de standaardwaarde van /<Rejected-By-UrlScan> gebruikt.
- UseFastPathReject=0
Standaard is deze optie ingesteld op 0. Als de optie is ingesteld op 1, wordt de instelling van RejectResponseUrl genegeerd in URLScan en wordt er onmiddellijk een 404-foutbericht weergegeven in de browser. Met deze instelling worden verzoeken sneller verwerkt dan met RejectResponseUrl, maar er zijn minder opties voor logboekregistratie toegestaan. Is deze optie is ingesteld op 0, dan wordt in URLScan de instelling RejectResponseUrl gebruikt voor de verwerking van verzoeken.
terug naar begin De secties [AllowVerbs] en [DenyVerbs]
De secties
[AllowVerbs] en
[DenyVerbs] bevatten de HTTP-woorden, ook wel methoden genoemd, die in URLScan worden toegestaan. Veelgebruikte HTTP-woorden zijn GET, POST, HEAD en PUT. Voor andere toepassingen, zoals FPSE and WebDAV (Web Distributed Authoring and Versioning), worden ook andere woorden gebruikt.
Voor de secties
[AllowVerbs] en
[DenyVerbs] wordt dezelfde syntaxis gebruikt. Beide secties bestaan uit een lijst met HTTP-woorden, waarbij elk woord op een aparte regel wordt weergegeven.
In URLScan wordt op basis van de waarde van de optie
UseAllowVerbs in de sectie
[Options] bepaald welke sectie wordt gebruikt. Standaard is deze optie ingesteld op 1. Als
UseAllowVerbs is ingesteld op 1, worden in URLScan alleen HTTP-verzoeken toegestaan die de woorden bevatten die zijn opgenomen in de sectie
[AllowVerbs]. Een verzoek waarin geen van deze woorden is opgenomen, wordt geweigerd. In dat geval wordt de sectie
[DenyVerbs] genegeerd.
Als
UseAllowVerbs is ingesteld op 0, worden in URLScan verzoeken geweigerd die woorden bevatten die in de sectie
[DenyVerbs] zijn opgenomen. Verzoeken met woorden die niet in deze sectie zijn opgenomen, worden toegestaan. In dat geval wordt de sectie
[AllowVerbs] genegeerd.
terug naar begin De sectie [DenyHeaders]
Wanneer een client om een pagina van een webserver verzoekt, stuurt deze doorgaans enkele HTTP-headers die aanvullende informatie over het verzoek bevatten. Veelvoorkomende HTTP-headers zijn:
- Host:
Deze header bevat de naam van de webserver. - Accept:
Deze header geeft aan welke bestandstypen de client kan verwerken. - User-Agent:
Deze header bevat de naam van de browser waarmee om de pagina wordt verzocht. - Authorization:
Deze header geeft aan welke verificatiemethoden de client ondersteunt.
Clients kunnen nog andere headers naar de server verzenden om extra informatie op te geven.
In de sectie
[DenyHeaders] geeft u op welke HTTP-headers in URLScan worden geweigerd. Als in URLScan een verzoek binnenkomt met een header die in deze sectie is opgenomen, wordt het verzoek geweigerd. Deze sectie bestaat uit een lijst met HTTP-headers, waarbij elke header op een aparte regel wordt weergegeven. Headers moeten worden gevolgd door een dubbele punt (:), zoals in
Header-Name:.
terug naar begin De secties [AllowExtensions] en [DenyExtensions]
Het bestandstype kan doorgaans worden afgeleid uit de bestandsextensie. Bestandsnamen voor Word-documenten eindigen doorgaans op .DOC, bestandsnamen voor HTML-documenten op .HTM of .HTML en tekst zonder opmaak op .TXT. In de secties
[AllowExtensions] en
[DenyExtensions] kunt u extensies opnemen die in URLScan moeten worden geblokkeerd. U kunt URLScan bijvoorbeeld zo configureren dat verzoeken voor EXE-bestanden worden geweigerd, zodat webgebruikers geen toepassingen op uw systeem kunnen uitvoeren.
Voor de secties
[AllowExtensions] en
[DenyExtensions] wordt dezelfde syntaxis gebruikt. Deze secties bestaan uit een lijst met bestandsextensies, waarbij elke header op een aparte regel wordt weergegeven. De extensie begint met een punt (.), zoals in .EXT.
In URLScan wordt op basis van de waarde van de optie
UseAllowExtensions in de sectie
[Options] bepaald welke sectie wordt gebruikt. Standaard is deze optie ingesteld op 0. Als
UseAllowExtensions is ingesteld op 0, worden in URLScan alleen verzoeken voor bestandsextensies toegestaan die zijn opgenomen in de sectie
[DenyExtensions]. Verzoeken voor bestandsextensies die niet in deze sectie zijn opgenomen, worden niet toegestaan. De sectie
[AllowExtensions] wordt genegeerd.
Als
UseAllowExtensions is ingesteld op 1, worden in URLScan verzoeken geweigerd voor bestandsextensies die niet in de sectie
[AllowExtensions] zijn opgenomen. Alleen verzoeken voor bestandsextensies die in deze sectie zijn opgenomen, worden toegestaan. De sectie
[DenyExtensions] wordt genegeerd.
Als u meer informatie wilt over de wijze waarop u URLScan moet configureren om verzoeken voor bestanden zonder extensie toe te staan, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
312376 HOW TO: Configure URLScan to Allow Requests with a Null Extension in IIS
terug naar begin De sectie [DenyUrlSequences]
U kunt URLScan configureren om verzoeken te blokkeren die bepaalde tekenreeksen in de URL bevatten. Zo kunt u verzoeken blokkeren die twee opeenvolgende punten (..) bevatten. Deze worden namelijk vaak door hackers gebruikt om in te spelen op zwakke plekken bij mapverzendingen. Als u een tekenreeks wilt blokkeren, neemt u deze op een aparte regel op in de sectie
[DenyUrlSequences].
Wanneer u tekenreeksen toevoegt, kan dit een negatieve invloed hebben op de prestaties van Outlook Web Access (OWA) voor Microsoft Exchange. Als u een bericht opent vanuit OWA, wordt de onderwerpregel van het bericht opgenomen in de URL waarvoor een verzoek is ingediend. Omdat met het bestand URLScan.ini verzoeken worden geblokkeerd die het percentageteken (%) of het en-teken (&) bevatten, ontvangen gebruikers een 404-foutbericht wanneer ze een bericht met een onderwerpregel zoals 'Verkoop toegenomen met 100%' of 'Bob & Stella komen op bezoek' proberen te openen. Verwijder deze tekenreeksen uit de sectie
[DenyUrlSequences] om dit probleem op te lossen. Dit gaat echter ten koste van de beveiliging omdat hierdoor mogelijk schadelijke verzoeken de server kunnen bereiken.
terug naar begin URLScan configureren voor gebruik met toepassingen die afhankelijk zijn van IIS
Toepassingen zoals Exchange, FPSE en Microsoft Visual Studio .NET zijn van IIS afhankelijk voor een juiste werking. Als u URLScan niet correct configureert, werken deze toepassingen mogelijk niet meer naar behoren.
Als u meer informatie wilt over de wijze waarop u URLScan moet configureren om te werken met deze toepassingen, klikt u op de volgende artikelnummers in de Microsoft Knowledge Base:
309508 XCCC: IIS Lockdown and URLscan Configurations in an Exchange Environment
309394 HOW TO: Use URLScan with FrontPage 2000
318290 HOW TO: Use URLScan with FrontPage 2002
310588 PRB: Security Toolkit Breaks ASP.NET Debugging in Visual Studio .NET
terug naar begin