Dag två med "Web Service and XML Security" var fylld av exempel på identitetshantering, Single-Sign-On, SAML, kryptering, signering och så vidare. Det finns bra källor till sån information så jag lämnar det till den intresserade studenten. Den här bloggen rymmer nog inte en utredning ändå. Men det var en del info som kanske inte är lika lättillgänglig. Låt oss börja med indatavalidering i webbtjänster ...
Indatavalidering i webbtjänster
Utför schema-härdning (förbättra säkerheten via dina scheman)
- Begränsa fältlängd
- Begränsa teckenuppsättningar
- Koda all utdata (t.ex. utf8)
- Definiera alla datatyper (inga
, heltal som strängar osv.)
Testa dina webbtjänster med dålig indata:
Storlek som inte stämmer Fel ordning på element Rekursiva/duplicerade element (speciellt dåliga för SAX-parse:ers som är event-drivna, Den vanligaste attacken är att tvinga fram fel i parse:ningen. Gunnar skulle skicka mig mer info om det.) Kommandon (t.ex. SQL-injektion)
Men se upp med hur indatavalideringen sprids ut i applikationen och mellan servrar. Jag tog upp den frågan med Gunnar och han höll med om att det kan bli en mardröm att underhålla om storlek på fält, tillåtna tecken och så vidare finns hårdkodade i flera lager. Grundregeln är att validera närmast domänmodellen men alltid innan indata får styra logiken. Det hela kretsar kring domändriven säkerhet som jag och min kollega Dan Bergh Johnsson har funderat på att gräva vidare i.
Fuzzing
OWASP har en webbtjänste-fuzzer skriven i Python som kan utgå från en WSDL och fuzz:a en webbtjänst. De ska vara på gång med att modellera "bra" indata utifrån scheman.
Sessioner, tillstånd och replay-attacker i webbtjänster
Webbtjänster behöver sällan sessioner eftersom de är tillståndslösa. Därför behöver inte en användare eller ett användande system autentisera sig mot tjänsten om säkrade attribut är tillgängliga, t.ex. genom SAML.
Men denna avsaknad av tillstånd gör replay-attacker lättare att genomföra. Anropen är helt enkelt inte matchade till någon session utan måste stå för sig själva. Det är med andra ord helt avgörande att ha med nonce/salt som hålls i en "förbrukad"-lista på tjänsteservern eller signerade tidsstämplar som är i något av tillstånden valid, (invalid,) used eller expired.
Med tidsstämplar i allmänhet uppstår problemet med tidsförskjutning (clock skew). Olika kontor i olika städer eller till och med länder får oundvikligen synkroniseringsproblem även om man centraliserar med en tidsserver. Det har gjort att man alltid får konfigurera tidsfönster som självklart öppnar upp för säkerhetshål.
SAML
Gunnar tror mycket på SAML. Det används "på riktigt" och ger en massa fördelar framför allt eftersom det kan ge federerad SSO utan en utrullad PKI. SAML 2.0 lade till den viktiga förmågan Single-Sign-Out.
Signerad och krypterad XML (inkl. lite mumma för kryptonördar)
Kanonikalisering av XML är svårt vilket är grundorsaken till att det ännu inte fungerar så bra. Man tror att det är lätt men att få det konsistent är svårt. Resultatet blir känsliga system där signaturer lätt blir fel.
Under diskussionen om signerad och krypterad XML kom den gamla principen om att "signera först, kryptera sen" upp. Det har att göra med att man ska veta vad man signerar och inte signera oläslig, krypterad information. Under den diskussionen kommer Gunnar med en ny nivå av kryptoparanoia. 2001 skrev nämligen Don Davis en artikel om att man bör signera ytterligare en gång på slutet - alltså signera-kryptera-signera. Varför?!?
Jo, om Alice skickar hemlig info till Bob genom att först signera och sen kryptera så kan Bob dekryptera och sen kryptera med Charlies publika nyckel. På det viset kommer det se ut som att Alice avsåg att skicka den hemliga informationen till Charlie. Bob kan alltså konspirera och se till att Alice åker dit för att ha läckt hemlig information till Charlie. Om Alice signerar en gång till på slutet så blir denna attack omöjlig.
Boktips
Gunnar tipsade om sin favoritbok inom säkerhet - Security Design Patterns av Blakley och Heath. Endast 102 sidor och ... gratis!
Hem och koda om alla era webbtjänster nu :).
Inga kommentarer:
Skicka en kommentar