Wat is een Web Application Firewall (WAF), en hoe verschilt die van een netwerkfirewall
Kort antwoord
Een netwerkfirewall filtert verkeer op poort, IP-adres en protocol. Hij heeft geen idee wat er eigenlijk in een HTTP-request zit. Een Web Application Firewall (WAF) zit een laag hoger en inspecteert de inhoud van webrequests, op zoek naar patronen die overeenkomen met bekende aanvalstypes, en blokkeert vervolgens requests die er kwaadaardig uitzien, ook als ze binnenkomen via een toegestane poort. De twee zijn aanvullende lagen, geen alternatieven voor elkaar.
Wat een netwerkfirewall controleert
Een netwerkfirewall neemt zijn beslissingen op basis van de buitenkant van een request, niet de binnenkant. Hij kijkt naar dingen zoals het bron- en bestemmings-IP-adres, de gebruikte poort en het protocol, en beslist dan of die combinatie wordt toegelaten. Dit wordt vaak layer 3- of layer 4-filtering genoemd, verwijzend naar de netwerk- en transportlaag van de netwerkstack. Het is een grof maar essentieel filter: poort 3389 blokkeren vanaf het publieke internet, poort 443 toestaan, alleen bepaalde bronbereiken toegang geven tot een adminomgeving, enzovoort.
Wat een netwerkfirewall niet doet, is het request openmaken en lezen wat erin staat. Als een verbinding is toegestaan op poort 443, laat de firewall het verkeer door en gaat hij verder. Hij parseert de HTTP-headers, de URL-parameters of de body van het request niet om te beoordelen of de inhoud zelf gevaarlijk is. Dat is met opzet zo: een netwerkfirewall werkt op een niveau waarop begrippen als "HTTP-request" of "webapplicatie" nog helemaal niet bestaan.
Wat een WAF in plaats daarvan controleert
Een WAF werkt op layer 7, de applicatielaag. Dat betekent dat hij daadwerkelijk de inhoud van een webrequest inspecteert, in plaats van alleen de envelop waarin het binnenkomt. Hij kijkt naar de URL, querystring, headers, cookies en request body, en vergelijkt wat hij vindt met patronen die horen bij bekende aanvalstypes: SQL injection-pogingen, cross-site scripting (XSS)-payloads en pogingen om kwaadaardige bestanden te uploaden, bijvoorbeeld. Komt een request overeen met een van die patronen, dan kan de WAF het blokkeren, loggen of aan een extra controle onderwerpen, ook al gebruikt de onderliggende verbinding een volledig legitieme poort en protocol.
Dit is het kernverschil in één zin: een netwerkfirewall stelt de vraag "mag deze verbinding er überhaupt door", een WAF stelt de vraag "gegeven dat deze verbinding is toegestaan, ziet de daadwerkelijke inhoud van dit request eruit als een aanval".
| Netwerkfirewall | WAF | |
|---|---|---|
| Laag | Netwerk/transport (layer 3-4) | Applicatie (layer 7) |
| Beslist op basis van | IP-adres, poort, protocol | Inhoud van het request: URL, headers, body |
| Ziet binnenin een HTTP-request | Nee | Ja |
| Typische aanvallen die hij vangt | Poortscans, ongeautoriseerde protocoltoegang, niet-toegestane bron-IP's | SQL injection, cross-site scripting, kwaadaardige bestandsuploads |
| Blinde vlek | Kwaadaardige inhoud verzonden via een toegestane poort | Aanvallen die niet afhankelijk zijn van requestinhoud, zoals rauwe verbindingsfloods |
Waarom de een de ander niet vervangt
Deze twee zitten met opzet op verschillende lagen, en geen van beide dekt de blinde vlek van de ander af. Een netwerkfirewall alleen vangt geen kwaadaardige SQL injection-payload die binnenkomt via een toegestane poort 443-verbinding, omdat die payload verstopt zit in inhoud die de firewall nooit is ontworpen om te lezen. Hij ziet een normale, toegestane HTTPS-verbinding en laat die gewoon door. Andersom vervangt een WAF alleen ook niet de grove filtering die een netwerkfirewall biedt: ongewenste poorten en bronbereiken blokkeren voordat verkeer de applicatie zelfs maar bereikt, blijft nuttig fundament.
Zie ze als twee lagen van dezelfde verdediging, niet als een keuze tussen de twee. Een netwerkfirewall beperkt wat er überhaupt bij een service mag komen. Een WAF kijkt vervolgens naar wat er daadwerkelijk in de requests zit die wel doorkomen.