Als security-bewuste ontwikkelaar is het bijdragen aan een legacy software-ontwikkelingsproject hetzelfde als het erven van een oud huis. Een oud huis met ontbrekende dakpannen, druppelende badkamerkranen, een voordeur die niet goed sluit, een hal die je moet opknappen en waar zorgwekkende scheuren in de fundering zitten. Je weet dan niet zo goed waar te beginnen.
De securityproblemen van applicaties kunnen net zo vervelend en divers zijn. Ze hebben bijvoorbeeld verouderde afhankelijkheden van oudere versies van softwarebibliotheken. Ze kunnen verkeerd geconfigureerd zijn met gebruik van onveilige protocollen. Ze zouden ook opensource-componenten met bekende kwetsbaarheden kunnen gebruiken, zoals de recent ontdekte CVE-2021-44228, oftewel log4j.
Als we de vergelijking doortrekken, zijn afgeschreven afhankelijkheden te vergelijken met een kapot dak. Als het aanpakken ervan wordt uitgesteld, kan een klein probleem al snel veel groter worden. Het gebruik van onveilige protocollen is te vergelijken met een kapot deurslot; beide zijn gemakkelijke ingangen voor indringers. De gebarsten funderingen zijn vergelijkbaar met kwetsbare opensource-bibliotheken: op elk moment kan een complete ramp uitbreken, of dat nu is doordat een kwaadwillende mijn applicatie aanvalt of doordat een storm mijn huis omver werpt.
Met zo’n lange lijst van problemen is het, in beide gevallen, moeilijk om prioriteiten te stellen van wat we als eerste moeten repareren. Alleen al het aantal problemen kan tot verlamming leiden, of ontwikkelaars (van zowel codes als huizen) ertoe aanzetten de hele zaak af te breken en opnieuw te beginnen.
Inspanning vs. impact
Een eenvoudig systeem om acties te prioriteren, kan een krachtig hulpmiddel zijn. Triage, oftewel het stellen van prioriteiten tussen de taken en veranderingen die nodig zijn om de security van een applicatie te verbeteren, is een effectieve manier om je taken te categoriseren. Je kan dan allereerst beginnen met het toekennen van een score aan de hoeveelheid impact die een oplossing heeft, die vaak samenhangt met de ernst van een kwetsbaarheid. Ernstige kwetsbaarheden die actief worden uitgebuit, zouden dan hoog scoren. Kwetsbaarheden die meer een kwestie van hygiëne zijn, scoren laag.
Geef naast deze scores ook een score voor de hoeveelheid moeite die het kost om het probleem op te lossen. Vervanging van een groot stuk functionaliteit heeft uiteraard een hoge score, terwijl vervanging van een afhankelijkheid voor een andere, bijgewerkte versie sneller zou zijn opgelost, en dus een lagere score heeft.
Op dit punt zal je lijst met taken binnen de volgende vier categorieën vallen:
- Taken met een hoge impact, maar die niet veel inspanning vergen. Die zouden je eerste prioriteit moeten zijn: dit zijn de laaghangende vruchten die een groot verschil maken voor de security van de applicatie, zonder veel tijd te kosten;
- Dan komen de taken die een grote impact hebben, maar ook een aanzienlijke hoeveelheid inspanning vereisen. Dit zijn je volgende grote projecten die je gestaag moet aanpakken zodra de easy wins zijn voltooid;
- Taken met een lage impact en een lage inspanning. Deze moeten onderaan op de takenlijst staan: werk ze af tussen grotere taken of wanneer je op iets anders wacht;
- Taken die veel inspanning vergen, maar weinig impact hebben. Deze komen nog verder onderaan de lijst. Misschien kun je bij deze taken beter overwegen om een alternatieve aanpak te vinden om de benodigde inspanning te verminderen.
De twee dimensies impact en inspanning zijn misschien voldoende om taken te prioriteren. Echter, met langere lijsten of misschien een eerste securitycontrole van een bestaande applicatie, kan dit nog steeds erg lange lijsten opleveren. Hier komt een derde dimensie goed van pas: waardoor jouw triagekaart verandert in een kubusvormig model, waarin je prioriteiten zijn gecategoriseerd. Maar in plaats van te denken in 3D, zal een eenvoudig scorings-algoritme meestal meer helpen.
Derde dimensie: exploiteerbaarheid
De derde dimensie kan exploiteerbaarheid zijn. Een toepassing kan uitzonderlijke kwetsbaarheden bevatten. Er zijn bijvoorbeeld lang bestaande problemen met bijna elk besturingssysteem en elke programmeertaal, en voorbeelden van randgevallen met veel gangbare opensource–bibliotheken. Als er echter niet aan alle voorwaarden is voldaan om deze kwetsbaarheden uit te buiten, vermindert dat de urgentie om de kwetsbaarheid te verhelpen.
Als een kwetsbaarheid bijvoorbeeld op geen enkele manier zichtbaar is voor een aanvaller, of als een kwetsbaar commando niet wordt gebruikt binnen een project, dan wordt de urgentie van een oplossing kleiner. De kwetsbaarheden moeten op een gegeven moment nog steeds worden verholpen. De omstandigheden kunnen veranderen en een kwetsbaarheid die nu niet kan worden misbruikt, kan dat in de toekomst wel worden. Maar deze toegevoegde lens geeft duidelijkheid over de taken die prioriteit hebben.
Deze derde dimensie moet helpen om kwetsbaarheden te sorteren, ongeacht hoe slordig het lopende project ook is. Het biedt een solide aanpak om elke kwetsbaarheid op de juiste plaats te zetten in de lange lijst van taken die mogelijk moeten worden uitgevoerd.
Vooral wanneer de takenlijst lang is, zal je hulp nodig hebben. Aangezien elk element van automatisering organisaties wapent om op systematische wijze bedreigingen te bestrijden, is automatisering de sleutel tot een effectievere uitvoering van taken op je triagekaart.
Triage is een essentiële eerste en doorlopende stap. Het combineren van deze methodes en dev-first tools zal de triage, de initiële hardening, en de doorlopende applicatie-security verbeteren.
(Auteur Daniel Berman is product marketing director bij Snyk.)
Daniel,
Ik heb het gevoel dat ik geen antwoord krijg op de vraag in de titel, tenminste niet expliciet. Want ik vermoed dat je het antwoord geeft met de opmerking dat als een kwetsbaarheid op geen enkele manier zichtbaar is voor een aanvaller de urgentie van het probleem kleiner wordt. En in de praktijk betekent dat als de urgentie maar klein genoeg is het probleem opgelost is hoewel een vooruitschuiven van het probleem bij legacy in de praktijk een betere term is.
De bedrijfkundige visie als het gaat om de investeringen en de impact op de bedrijfsvoering leert dat de businesscase nog wat mist. ICT is alleen maar een middel om een bepaald bedrijfsdoel te behalen waarbij door alle uitbestedingen een proces zoals configuratiemangement in de vergetelheid is geraakt. En dat leidt tot verrassingen in de levenscyclus van bedrijfsprocessen doordat onderliggende functionele en fysieke kenmerken aangaande de operationele geschiktheid niet meer bewaakt worden. Want veroudering is geen probleem zolang er updates op de (micro)code komen en er een ruime beschikbaarheid is aan onderdelen voor de break & fix. Laatste heeft door supply chain uitdagingen bedrijven met de neus op de feiten gedrukt aangaande continuïteit van de bedrijfsvoering.
Oja, met legacy worden over het algemeen de oudere systemen bedoeld die reeds lang draaien binnen een organisatie en daarom vaak de basis vormen van zo’n organisatie. Mochten lezers geen idee hebben van (voortuitgeschoven) probleem, veel kritische maar ook essentiële bedrijfsprocessen zijn afhankelijk van systemen die al aardig verouderd zijn. En DevOps is als paradigma niet de toverstaf gebleken om dit te veranderen omdat idee van ‘verzuiling’ in containers niet werkt in een bedrijfslandschap waar bedrijfsprocessen onderlinge afhankelijkheden hebben.
Maar dat is alleen maar mijn mening, een mening die vooral gebasseerd is op de waarneming dat ‘lift & shift’ van de techniek alleen maar een verschuiving van het probleem is. Tenslotte kun je de impact van een verstoring alleen maar beoordelen naar het belang voor het bedrijfproces en wat betreft de onderliggende functionele en fysieke kenmerken aangaande de operationele geschiktheid ben ik nieuwsgierig naar modellering middels digital twins hierin. De extra dimensie van toekomstvast kan helpen bij de planning omdat je niet eindeloos de oplossing voor je uit kan blijven schuiven.
Er is een kamer met in ene hoek staat sinterklaas, andere hoek kerstman, derde hoek security-bewuste ontwikkelaar, laatste hoek een politieagent.
In het midden van de kamer ligt een lijk.
vraag: wie heeft de moord gepleegd ?