Penicillin är inte lösningen

av Stefan Pettersson

(Publicerad 2009-02-10)

IT-säkerhet som område är fullt av olösta problem och vi är många som försöker vara en del av lösningen. Tyvärr råder det ofta förvirring kring vilkea problem som ska lösas.

OWASP har släppt sin sjätte podcast. Jag har inte lyssnat på någon av dem innan men eftersom sexan enligt utsago skulle vara ett ”round table” om web application firewalls (WAFs) så passade jag på. Det talades om en del annat också men jag fokuserar på just vad de hade att säga om WAF.

Herrarna kring runda bordet var (mer eller mindre) kategoriskt emot att skydda webbapplikationer med en WAF. Den här posten syftar dock inte till att redogöra för alla deras argument eller mina motargument. Bara ett av dem.

Ett vanligt argument som användes går något i stil med: ”Det är inte lösningen på problemet, fel i mjukvara ska rättas i mjukvara”. Detta upprepades också i diskussionen/kriget på WASC:s mailinglista som följde där Martin O’Neal skriver:

The place to fix software vulnerabilities, is yes, in the software.  You can mask them and fudge them elsewhere, but you can only fix them in the software.  WAFs can only fiddle around on the fringe, and can only address many issues by damaging the user experience. Whereas fixing the software should not.

Är inte det här något vi har hört förr? Ganska många gånger? När stöd för NX-biten kom till x86-processorer i slutet av 90-talet och man ville införa det i Linux så opponerade sig Linus:

In short, anybody who thinks that the non-executable stack gives them any real security is very very much living in a dream world. It may catch a few attacks for old binaries that have security problems, but the basic problem is that the binaries allow you to overwrite their stacks. And if they allow that, then they allow the above exploit.

Det här är ett ställningstagande som återkommer i diverse sammanhang. Det har bl a sagts i samband med diskussioner om StackGuard, /GS, ASLR och andra skydd mot buffer overflows. Jag var tyvärr inte med på den tiden men jag räknar kallt med att liknande argument har använts mot antivirus och brandväggar.

Nu kommer det hemska; de har ju rätt. De är inte lösningen på problemet. Antivirusprogram missar rutinmässigt filer som den inte har hört talas om, brandväggar kan inte göra något åt trafik den släpper igenom (läs: HTTP), NX skyddar inte mot return-to-libc, ASLR kan inte nödvändigtvis täcka hela processens minne, o s v.

Detta är inte helhetslösningar det är verktyg som löser (ibland väldigt) specifika problem.  En stack som inte är exekverbar skyddar definitivt från att kod exekveras på stacken, inget annat. Så enkelt är det.

WAF har tyvärr väldigt många och lösa definitioner än så länge men de löser sina specifika uppgifter på ett bra sätt. (Vilka dessa är tar vi någon annan gång.)

Att penicillin inte hjälper när någon har gett dig en fläskläpp gör det inte värdelöst. Penicillin hjälper oss mot bakterier, det är en del av vårt sjukvårdssystem.


Stefan Pettersson

Annonser