Kodgranskning och säker utveckling
Ett området som Triop AB bedriver verksamhet inom är säker utveckling och kodgranskning. Denna typ av granskningar är speciellt viktig inom system och produkter där hög assurans är av stor vikt.
Kodgranskningsuppdraget går ut på att identifiera sårbarheter och ge förslag på säkerhetshöjande åtgärder.
Ett urval av några kontrollpunkter vid en kodgranskning, manuellt samt automatiserat:
- Används säkra funktioner framför osäkra
- Hur hanteras användargenererad data från exempelvis nätverk
- Blackboxtester där man hittar på hur slutprodukten används
- Fuzztester
- Minnesläckage
- Exceptions eller returvärden som ej hanteras
- Signed/unsigned-problem, off by-x, stränghantering
- Kodens kvalitét i stort, såsom kommentarer och stil
- Debugkod etc som ej ska förekomma i produktion
- Tredjepartsbibliotek som inte är uppdaterade eller innehåller sårbarheter
- Används säkra funktioner i systemet såsom chroot/setuid etc
- Uppföljning mot CERT Secure Coding standards
- Eventuella logiska fel/tankevurpor
- Tidigare identifierade sårbarheter
- Kompilatorflaggor
- Unittester eller andra tester
- Race conditions
- Svaga eller kryptografiska funktioner som används felaktigt
- Loggning
- Automatiska verktyg, se lista hos NIST
- Överbelastningsattacker
- Rena slarvfel
Givetvis är tillgång till källkod en mycket trevlig förutsättning men om det inte finns tillgänglig så kan många av ovan tester ändå genomföras med hjälp av reverse-engineering.
Att genomföra en kodgranskning är inget som genomförs på en eller två dagar utan tar vanligtvis åtskilliga veckor eller månader. Samt så bör även uppföljning genomföras efter exempelvis ett år eller några månader då eventuella förslag implementeras och sårbarheter åtgärdats.
En annan intressant fråga är hur mycket tid en kodgranskare ska lägga på att påvisa huruvida en sårbarhet går att exploitera av en antagonist. Jag rekommenderar så liten tid som möjligt och att alla uppdagade sårbarheter ska hanteras som kritiska och åtgärdas så snabbt som möjligt.
Kodkvalitén kan även bli högre bara av vetskapen av att kodgranskning genomförs och kvalité och säkerhet går oftast hand i hand.