Wat is secure coding en waarom is het belangrijk?

Code op laptopscherm naast een code-symbool en een slot
Klik hier voor een korte samenvatting van dit artikel
In het kort: waarop moet je letten bij secure coding?

In een wereld waar steeds meer van de bedrijfsvoering via een computer wordt gedaan, is het steeds belangrijker dat de software veilig is om mee te werken. Softwarebeveiliging begint met secure coding, oftewel veilige programmering. Hiervoor zijn er verschillende industriestandaarden. Bij allemaal moet je minimaal op deze zeven zaken letten:

  1. De gegevenscyclus.
  2. Access control.
  3. Het simpel houden.
  4. Encryptie.
  5. Error-logging.
  6. Databeveiliging.
  7. Threat modeling.

Hoe je dit doet en waarom secure coding nu zo belangrijk is, lees je in de rest van dit artikel. Aan het einde geven we je bovendien een overzicht met bronnen waarmee je zelf aan de slag kunt.

Code icoon in een glazen stulpAls je de nieuwspagina op VPNGids.nl leest, lees je vaak over hacks en datalekken. Zelfs grote bedrijven en organisaties hebben hier last van. Hieruit blijkt maar weer hoe belangrijk cybersecurity is. Voor je het weet heeft een hacker toegang tot sensitieve gegevens, zoals persoonsgegevens van je klanten of medewerkers.

Een belangrijk onderdeel van het beveiligen van je bedrijf en je (software-)producten is veilig programmeren, oftewel secure coding. Wat is dit eigenlijk, wat houdt het in en waarom is het nu zo belangrijk? Hier lees je alles over in het onderstaande artikel.


Wat is coderen?

Coding, computer programming, of in het Nederlands, coderen of programmeren, is het proces van computerprogramma’s en andere software maken. Je schrijft hierbij code in een taal die een computer kan verstaan, zoals C++ (gebruikt door onder andere Windows), Java (veel gebruikt in games, zoals Minecraft) of Python (allround een veelvuldig gebruikte taal).

Tijdens het programmeren dienen codeurs te letten op veel verschillende zaken, zoals:

  • De vereisten van het programma. Hoe moet de uiteindelijke software eruitzien en wat moet het kunnen?
  • Code-optimalisatie en -efficiëntie. Programma’s moeten lang en veel rekenen om grote hoeveelheden code te draaien. Bovendien is de kans groter dat een foutje niet opvalt in een lange lijst aan code. Daarom is het belangrijk zo kort en efficiënt mogelijk te schrijven.
  • Codebeveiliging. Hier komt secure coding om de hoek kijken.

Wat is secure coding?

Code-symbool met slotjeSecure coding is het zorgen voor veilige codering van een programma. Specifiek is dit een vorm van programmeren waarbij je al bij het eerste stadium rekening houdt met de veiligheid van de software. App-ontwikkelaars en andere programmeurs doen aan secure coding om de meest voorkomende kwetsbaarheden te weren. Dit doen ze door specifieke richtlijnen, regels en best practices te volgen.

In dit artikel gaan we verder in op wat deze ‘secure coding-standaarden’ dan precies zijn. Eerst lichten we even toe waarom het zo belangrijk is om deze standaarden te volgen.


Waarom is secure coding belangrijk?

Cybersecurity wordt steeds belangrijker. Met de opkomst van bijvoorbeeld Ransomware-as-a-Service (RaaS), waarbij ook niet-technisch onderlegde criminelen kunnen hacken, is het belangrijk om systemen optimaal te beveiligen.

Het belang van secure coding werd in december 2021 nog eens benadrukt. Toen bleek het veelgebruikte log-programma Apache Log4j vatbaar te zijn voor ‘Remote Code Execution (RCE)’-aanvallen. Criminelen konden hierdoor toeslaan door code uit te voeren binnen het programma en op deze manier controle uitoefenen op een heel bedrijfsnetwerk.

Ook het National Institute of Standards and Technology (NIST) toont ons dat het aantal kwetsbaarheden in code sterk is toegenomen. In 2016 waren er nog maar 6.447 gevallen bekend, terwijl dat in 2021 met meer dan 300% is toegenomen tot 20.143 kwetsbaarheden. Dit laat dus veel ruimte voor hackers om systemen aan te vallen. Om dit te vermijden, moeten we deze kwetsbaarheden patchen.

Veel beter is natuurlijk om de kwetsbaarheden te voorkomen. Dat doe je dus met secure coding. Dit klinkt misschien als veel werk, maar cyberaanvallen leiden tot het verlies van sensitieve informatie. Ook kan je service langere tijd offline zijn. Hiermee loop je heel wat inkomsten mis of riskeer je zelfs boetes voor het lekken van persoonlijke gegevens. Door secure coding kun je dus een hoop kosten besparen.


Hoe ga ik aan de slag met secure coding?

Zelf beginnen met programmeren kan overweldigend aanvoelen. Waar moet je beginnen? Er is zo veel informatie, dat je door de bomen het bos bijna niet meer ziet. Zo heeft het Open Web Application Security Project (OWASP) frameworks voor je, maar gebruikt het Computer Emergency Response Team (CERT) voor het Software Engineering Institute (SEI) weer net iets andere richtlijnen. Ook op Reddit kun je veel nuttige – en minder nuttige – informatie vinden.

Om je op weg te helpen, hebben we zeven van de belangrijkste aspecten van veilig programmeren op een rij gezet.

Opsomming van aspecten van veilig programmeren

1. Gegevenscyclus: van data-input tot -verwijdering

Software heeft data-input nodig om iets mee te doen, waarna het een output levert. Wanneer je een programma ontwikkelt, moet je dus nadenken over de data die je wilt verzamelen. Welke gegevens heb je nodig, hoe verzamel je deze en hoe verwerk je deze?

Enkele vragen waar je antwoord op wilt hebben als het gaat om cybersecure coderen zijn:

  • Welke data heb ik nodig?
  • Mag ik deze gegevens verzamelen volgens de wet (AVG)?
  • Waar haal ik de data vandaan?
  • Wie voert de data in?
  • Hoe controleer ik de validiteit van de gegevens?
  • Hoe check ik hoe betrouwbaar de data is?

2. Access control

Je wilt natuurlijk niet dat iedereen jouw software of website kan aanpassen. Daarom is het van belang dat je het programma beveiligt door middel van een authenticatiesysteem. Best practices voor authenticatie en wachtwoordmanagement hierbij zijn:

  • Gebruik een betrouwbaar systeem van password hashing.
  • Stel wachtwoordvereisten in. Laat gebruikers bijvoorbeeld alleen wachtwoorden maken van minimaal 8 tekens, waarbij zowel hoofdletters als kleine letters, cijfers en speciale tekens gebruikt moeten worden.
  • Sla de inloggegevens extra beveiligd op.
  • Stel tweefactorauthenticatie in.
  • Stel in dat applicaties waar je langere tijd ingelogd kunt zijn periodiek uitloggen.

Ook binnen je eigen bedrijf wil je zorgen dat niet iedere medewerker overal toegang toe heeft. In je zogenaamde ‘access control’-beleid wil je gebruikmaken van deze twee principes:

  • Principle of least privilege (PoLP)
  • Separation of duties principle

Korte uitleg van de principes in een 'Access Control'-Beleid

Principle of least privilege

PoLP houdt in dat je medewerkers alleen toegang geeft tot het minimaal aantal systemen en programma’s waarmee ze hun werk wel goed kunnen uitvoeren. Hierbij moet je vooral opletten met privilege creep, of privilege aggregation (opeenhoping).

Stel je hebt een inkoopmedewerker. Deze werknemer heeft toegang tot het salessysteem om nieuwe leveranciers toe te voegen. Na goed functioneren groeit deze medewerker door tot accountmanager. Als accountmanager kan hij/zij facturen goedkeuren. Als de medewerker de toegang tot het invoeren van nieuwe leveranciers nog steeds heeft, kan hij/zij nu een fictieve leverancier aanmaken en een betaling doen naar zijn/haar eigen bankrekening. Wanneer je het principe van least privilege volgt, wordt de toegang tot de systemen van de inkoopmedewerker echter ingetrokken op het moment van promotie.

Separation of duties principle

Het principe van functiesplitsing, zoals separation of duties in het Nederlands soms wordt genoemd, lijkt erg op het principe van minste privilege. Dit principe houdt in dat taken opgesplitst worden waarbij telkens een andere persoon de verantwoordelijkheid draagt.

Als we kijken naar programmeren, dan zie je de volgende taken:

  1. De codeur schrijft het programma.
  2. Een tweede codeur controleert dit programma.
  3. Zodra het programma goed genoeg is voor publicatie, geeft een senior- of managementmedewerker een teken van goedkeuring.
  4. Een derde codeur voert de code door.

3. Houd het simpel

Rommelige code met een kruisje naast nette code met een vinkjeWe hebben het er al even over gehad, maar je kunt het niet genoeg benadrukken. Het is bij coderen belangrijk om efficiënt te schrijven. Probeer de code zo simpel en duidelijk mogelijk te houden. Complexe code vergroot de kans op kwetsbaarheden namelijk. Je loopt dan het risico dat je programma niet werkt of dat hackers toegang krijgen tot je netwerk.

Ook zorgt een lange lijst aan code er natuurlijk voor dat je kleine foutjes minder snel opmerkt. Zo is het lastig om eventuele kwetsbaarheden later te patchen.

4. Cryptografie

Mail wordt decrypt door sleutelDe programmeerstandaard die we onder het kopje ‘Waarom is secure coding belangrijk?’ al noemden, de NIST, benadrukt het belang van goede cryptografie. Wanneer je cryptografie gebruikt om bestanden veilig op te slaan en uit te wisselen, is het belangrijk om gebruik te maken van geteste encryptiemethoden. Zelf je cryptografische processen verzinnen wordt sterk afgeraden!

Als je op zoek bent naar een veilige encryptiemethode, kom je al snel uit op AES-256. Deze ‘Advanced Encryption Standaard’ neemt telkens blokken van 256 bits die het veertien keer versleutelt. Andere vormen van encryptie en typen cryptografische algoritmes vind je in het artikel over ‘Encryptie: wat is het en hoe werkt het?‘.

5. Loggen en errors

Zelfs de best geschreven code bevat waarschijnlijk ergens fouten. Ook cybercriminelen worden steeds slimmer en kunnen na een bepaalde tijd nieuwe kwetsbaarheden vinden of creëren. Het is daarom belangrijk dat je bijhoudt wat er gebeurt binnen je systeem. Als er dan vreemde dingen gebeuren, zie je dit meteen.

Lijst met een vergrootglas en schildAls je aan de hand van de logs ziet dat er inderdaad iets fout gaat, dan kun moet je hier natuurlijk naar handelen. Wat moet je bijvoorbeeld doen als je ziet dat een account op vreemde tijden inlogt of wanneer er meerdere keren een verkeerd wachtwoord is ingevuld?

Om je hierop voor te bereiden is het belangrijk om een zogenaamd incident response plan op te stellen vóór er daadwerkelijk iets misgaat. Zo bereid je jezelf voor op een crisissituatie, zodat je deze zonder te veel stress kunt oplossen.

6. Databeveiliging

Ook wanneer je de gegevens eenmaal hebt verzameld, moet je bezig blijven met de beveiliging van je gegevens. Zo wil je niet dat een programma of persoon ze zomaar aan kan passen. Dus hoe ga je met de data om gedurende opslag en transmissie? Hier zijn een aantal zaken waaraan je moet denken:

  • Bewaar wachtwoorden en connectielogs niet in plain text of op een andere niet-versleutelde manier.
  • Volg de principes van least privilege en separation of duties.
  • Verwijder je cachegeheugen en andere (persoons)gegevens die niet bewaard hoeven worden regelmatig.
  • Maak beveiligde back-ups van belangrijke, gevoelige gegevens.

Gegevens deleten

Computer met een vuilnisbak icoontjeWanneer je de gegevens niet meer nodig hebt, is het bovendien belangrijk deze niet te laten rondslingeren. Om privacyredenen wil je deze op een juiste manier verwijderen door middel van:

  • Clearing. Hiermee overschrijf je de originele gegevens. Denk hierbij aan het terugzetten van je computer naar de fabrieksinstellingen. De optie om een bestand te ‘deleten’ op Windows-pc’s is ook een vorm van clearing.
  • Purging. Dit is een nog effectievere manier van dataverwijdering, waarbij ook technisch onderlegde hackers niet meer makkelijk bij gegevens kunnen. Een voorbeeld hiervan is het houden van een magneet bij je server. Let hierbij wel op dat je álle gegevens op het apparaat kwijt bent, als je dit doet.
  • Destroying. Dit is het volledig verwoesten van de data. Je stopt een papier in de shredder of slaat met een hamer op je de hard drive van je computer. Je bent zowel de hardware als de data nu volledig kwijt. Dit is dus echt een last resort.

7. Threat modeling

Zoals we eerder aangaven, is het belangrijk om je voor te bereiden op eventuele cybersecurityincidenten. Een manier waarop je dit onder andere doet is door verweer in te bouwen in de broncode. Hierbij denk je op voorhand na over wat hackers of andere dreigingen zouden kunnen doen, en vervolgens bouw je er beveiliging tegen in.

Neem dit voorbeeld in de programmeertaal Python. Het gaat om een simpele calculator.

compute = input('\nYour expression? => ')
if not compute:
print ("No input")
else:
print ("Result =", eval(compute))

In het Nederlands staat hier:

  • Bereken de uitkomst van gegevens die iemand zelf invult.
  • Als dit niet te berekenen is, print dan ‘No input’.
  • Als dit wel te berekenen is, print dan ‘Result = [uitkomst berekening]’.

Voer je hier een rekensom in, zoals 5*6, dan resulteert dit in ‘Result = 30’. Als je in input ‘as_import_(‘os’).system(‘rm rf /’)’ invult, dan worden alle files waarop dit script werkt gedeletet. Dat wil je natuurlijk niet. Dit soort problemen kun je tegengaan door bijvoorbeeld inputmogelijkheden te beperken. Zo kun je:

  • Scripts instellen dat ze alleen werken met een bepaald soort input. Met de validate() functie kun je bijvoorbeeld de input vergelijken met een whitelist zoals bij split tunneling. Alleen als de input hierin staat, mag het script draaien. In het script hierboven doe je dat zo:
    compute = input('\nYour expression? => ')
    if not compute:
    print ("No input")
    else:

    if validate(compute):
    print ("Result =", eval(compute))
    else:

    print ("Error")
  • Alleen specifieke soorten input toestaan. Als je bijvoorbeeld wilt dat het script alleen werkt met nummers, niet met files of andere data, dan gebruik je de onderstaande functie. Let er wel op dat dit niet mogelijk is als een-op-eenvervanging met de code hierboven, omdat je voor een calculator ook wiskundige tekens nodig hebt, zoals plus en min, niet alleen nummers.
    compute = int(input('\nYour expression? => '))

Meer bronnen voor het bouwen van veilige software

Je IT-team op de hoogte houden van de laatste ontwikkelingen op het gebied van veilig programmeren is erg belangrijk. Een programmeur is immers niet geboren met alle kennis. Ook verandert de wereld van cybersecurity en cybercrime continu. Wat nu veilig wordt geacht, kan over een paar maanden een kwetsbaarheid blijken.

Je werknemers trainen en laten oefenen is dus cruciaal – zeker als je geen externe managed security serviceprovider (MMSP) wilt inhuren. Hieronder verwijzen we je dan ook graag naar enkele nuttige bronnen om verder te leren:

BronBeschrijving
OWASP Developer Guide en CERT SEIOpen Web Application Security Project (OWASP) en de Computer Emergency Response Team (CERT) voor het Software Engineering Institute (SEI) hebben een goed overzicht van de standaarden in programmeren. Zo leer je de meest voorkomende fouten te voorkomen.
Microsofts Bible on Secure CodingMicrosoft heeft ook een handleiding gemaakt om iedere stap in het softwareontwikkelingsproces te doorlopen.
OWASP Security Knowledge FrameworkDit is een open-source webapplicatie van OWASP dat veilig programmeren binnen verschillende programmeertalen uiteenzet.
CheckMarks en CAST SoftwareDit zijn bedrijven die je code kunnen controleren op eventuele fouten. Als je nog weinig ervaring hebt of onzeker bent over je code, kun je hier hulp inschakelen.
RedHat TutorialsHier vind je tutorials over allerlei coderingsaspecten. Je leert de basis van input validatie, autorisatie en meer.

Conclusie: secure coding is de eerste stap in netwerkbeveiliging

De cybersecurity van je bedrijf begint bij de veiligheid van de software. Secure coding, het veilig programmeren van deze software, is dus erg belangrijk. Voordat je zomaar aan de slag gaat, is het belangrijk om bij een aantal zaken stil te staan. Zo voorkom je al veel problemen, wat erg fijn is voor je bedrijfsvoering.

Wil je meer weten over het cybersecure houden van jouw bedrijfsnetwerk en kantoor? Of ben je benieuwd hoe het zit met beveiligingsnormen voor thuiswerken of werken met een eigen laptop? Neem dan eens een kijkje op onze zakelijke pagina, waar je informatie vindt zoals:

Secure coding: veelgestelde vragen

Heb je een vraag over veilig programmeren waar je snel antwoord op wilt krijgen? Klik dan op een vraag in onze FAQ om een kort antwoord te zien. Wil je meer weten? Stel dan je vraag in de reacties hieronder.

Secure coding is een vorm van programmeren waarbij er vanaf het coderingsstadium al rekening wordt gehouden met beveiliging. Programmeurs doen dit om de meest voorkomende kwetsbaarheden te weren. Hoe dit werkt en waaraan je moet denken bij secure coding lees je in ons uitgebreide artikel over dit onderwerp.

Wanneer je wordt gehackt, kost het veel geld, tijd en vertrouwen om dit op te lossen. Secure coding streeft ernaar om de kans op hacks zo klein mogelijk te houden door beveiliging al vanaf het vroegste stadium in te bouwen. Hoe je hiermee aan de slag gaat, lees je in ons artikel over secure coding.

PoLP staat voor ‘principle of least privilege’. Dit principe houdt in dat je medewerkers slechts toegang geeft tot het minimaal aantal systemen waarmee ze hun werk wel goed kunnen uitvoeren. Vooral wanneer een werknemer promotie krijgt, moet je opletten dat deze geen privileges opbouwt.

Secure coding doe je aan de hand van verschillende standaarden, regels en best practices. In het kort komt het erop neer dat je op deze 7 zaken moet letten:

  1. De gegevenscyclus.
  2. Access control.
  3. Het simpel houden.
  4. Encryptie.
  5. Error-logging.
  6. Databeveiliging.
  7. Threat modeling.
Techredacteur
Tamara is al jaren bezig met taal en communicatie. De steeds vernieuwde kennis over tech en cybersecurity weet ze zo goed over te brengen op het grote publiek. Tamara is geïnteresseerd in kwesties rondom (overheids)censuur en de balans tussen privacy en vrijheid online.
Plaats een reactie
Een reactie plaatsen