Generatieve AI zorgt voor een ommekeer in de software-industrie, met tools als Claude Code, GitHub Copilot en andere, waardoor ontwikkelaars een ongekend niveau van efficiëntie kunnen bereiken. Hoewel dit een opwindende ontwikkeling is, roept het ook belangrijke zorgen op, waardoor belanghebbenden worden aangemoedigd om deze technologieën met de nodige voorzichtigheid te benaderen. Huidige AI-tools beschikken vaak niet over het genuanceerde inzicht dat nodig is om subtiele, maar cruciale aspecten van softwareontwikkeling aan te pakken, met name op het gebied van beveiliging.

Deze cursus biedt een uitgebreid inzicht in het verantwoord gebruik van generatieve AI bij het programmeren. Deelnemers verdiepen zich in onderwerpen binnen de softwareontwikkeling die het meest gevoelig zijn voor de gevolgen van onzorgvuldig gebruik van generatieve AI, waaronder authenticatie, autorisatie en cryptografie. Het lesprogramma omvat ook een analyse van de manier waarop Claude Code, GitHub Copilot en andere tools omgaan met veilige programmeerpraktijken in verband met belangrijke kwetsbaarheden die worden beschreven in de OWASP Top Ten, zoals path traversal, SQL-injectie of cross-site scripting.

Door middel van hands-on leren en experimenteren krijgen deelnemers een goed begrip van zowel de sterke kanten als de beperkingen van AI-ondersteunde ontwikkeling. Daarnaast laten casestudy's van echte incidenten de gevolgen van onveilige code zien en demonstreren ze de dubbele aard van generatieve AI als zowel een hulpmiddel als een potentieel risico.

Aan het einde van de cursus beschikken ontwikkelaars over de kennis en vaardigheden om AI-tools op een verantwoorde manier te integreren in de levenscyclus van softwareontwikkeling, waardoor de efficiëntie toeneemt zonder de veiligheid of productkwaliteit in gevaar te brengen.

Deze variant van de cursus over beveiliging in C en C++ gaat uitgebreid in op de manier waarop GenAI omgaat met bepaalde beveiligingsproblemen in code. Via een aantal praktische oefeningen doen deelnemers uit eerste hand ervaring op met het verantwoord gebruik van GenAI en leren ze hoe ze het systeem kunnen aansturen om de meest veilige code te genereren. In sommige gevallen is dit eenvoudig, maar in de meeste gevallen is dat niet zo; en in weer andere gevallen is het in feite onmogelijk. Tegelijkertijd bieden de oefeningen algemene ervaring met het gebruik van GenAI in de dagelijkse programmeerpraktijk – wat je ervan kunt verwachten en op welke gebieden je er beter niet op kunt vertrouwen.

PRAKTISCHE INFORMATIE

  • Als training op locatie niet haalbaar is, kunnen we een live, interactieve online (virtuele) of hybride training aanbieden. Het standaardprogramma met een inhoud van 3 dagen kan ook in 5 halve dagen worden gegeven (van maandag tot vrijdag).
  • Benieuwd hoe je de return-on-investment (ROI) van secure coding-trainingen kunt kwantificeren? Bekijk dan dit artikel.

Leerdoelen

  • De essentie van verantwoorde AI begrijpen

  • Vertrouwd raken met essentiële cyberbeveiligingsconcepten

  • Verschillende beveiligingsfuncties correct implementeren

  • Kwetsbaarheden en hun gevolgen identificeren

  • Leer de beste beveiligingsmethoden in C++

  • Omgaan met kwetsbaarheden in componenten van derden

  • Benaderingen en principes voor invoervalidatie.

Doelgroep

C- en C++-ontwikkelaars die gebruikmaken van GenAI-tools.

Kennis:
Algemene ontwikkeling in C++ en C.

Delivery In-company (op locatie of online)
Duur 3 consecutive days
Groepsgrootte Maximaal 12 deelnemers
Aanpassing De training kan worden aangepast aan uw organisatie, context en leerdoelen.
Taal Engels
Investment Op aanvraag
Brochure downloaden

Programma

Dag 1
: Verantwoord programmeren met GenAI
Wat is beveiliging?
Bedreigingen en risico’s
Soorten cyberbeveiligingsbedreigingen – de CIA-triade
Soorten cyberbeveiligingsbedreigingen – het STRIDE-model
Gevolgen van onveilige software
Wat is verantwoorde AI?
Beveiliging en verantwoorde AI bij softwareontwikkeling
Kwetsbaarheden in het geheugenbeheer
Basisbegrippen van assembler en aanroepconventies
•De basis van x64-assembly
•Registers en adresserings
•Meest voorkomende instructies
•Aanroepconventies op x64
oOproepconventie – waar gaat het om?
oAanroepconventie op x64
oHet weefgetouw
oGestapelde functieaanroepen
Buffer overflow
•Geheugenbeheer en beveiliging
•Beveiligingsproblemen met Buffer
•Buffer overflow op de stack
oBuffer overflow op de stack – stack smashing
oMisbruik – De controlestroom kapen
oLab – Buffer overflow 101, hergebruik van code
oMisbruik – Willekeurige uitvoering van code
oShellcode injecteren
oLab – Code-injectie, misbruik met shellcode
oCasestudy – Stack BOF bij de verwerking van FriendlyName van de Wemo Smart Plug
•Manipulatie van aanwijzers
oAanpassing van sprongtabellen
oHet overschrijven van functiepointers
Aanbevolen werkwijzen en enkele veelvoorkomende fouten
•Onveilige functies
•Omgaan met onveilige functies
•Lab – Buffer overflow verhelpen
•Het gebruik van std::string in C++
•Strings zonder afsluiting
•readlink() en het afsluiten van tekenreeksen
•Het bewerken van C-achtige strings in C++
•Kwaadaardige tekenreeksafsluiting
•Lab – Verwarring over de afsluiting van strings
•Fouten bij het berekenen van de lengte van strings
Dag 2
: Beveiliging van het geheugenbeheer
De toolchain beveiligen
Compileropties en instrumentatie
•De toolchain in C++ beveiligen
•FORTIFY_SOURCE gebruiken
•Lab – Effecten van FORTIFY
•AddressSanitizer (ASan)
oAddressSanitizer (ASan) gebruiken
oLab – AddressSanitizer gebruiken
•Bescherming tegen stack-smashing
oBoF opsporen met een stack-canary
oKlonen van argumenten
oBescherming tegen stack-smashing op verschillende platforms
oSSP-wijzigingen in de proloog en epiloog
oLab – Effecten van de bescherming tegen stack smashing
Beschermingsmechanismen tijdens de uitvoering
•Instrumentatie tijdens de uitvoering
•Address Space Layout Randomization (ASLR)
oASLR op verschillende platforms
oLab – Effecten van ASLR
oASLR omzeilen – NOP-sleds
•Niet-uitvoerbare geheugengebieden
oHet NX-bit
oWrite XOR Execute (W^X)
oNX op verschillende platforms
oLab – Effecten van NX
oNX-omzeiling – Aanvallen door hergebruik van code
-Return-to-libc / arc-injectie
oReturn Oriented Programming (ROP)
-Bescherming tegen ROP
-Casestudie – Systematisch misbruik van een buffer overflow in MediaTek
Veelvoorkomende kwetsbaarheden in softwarebeveiliging
Beveiligingsfuncties
•Verificatie
•Wachtwoordbeheer
oWachtwoorden van accounts opslaan
oWachtwoord tijdens verzending
oLab – Is het hashen van wachtwoorden alleen voldoende?
oWoordenboekaanvallen en brute-force-aanvallen
o
o zoutenAdaptieve hashfuncties voor het opslaan van wachtwoorden
•Wachtwoordbeleid
oNIST-vereisten voor authenticatiemiddelen met opgeslagen geheime gegevens
oMigratie van de wachtwoorddatabase
-kwaliteit van de code
•Code-kwaliteit en beveiliging
•Gegevensverwerking
oTypefout
oLab – Typefout
oInitialisatie en opschoning
-Constructors en destructors
-Initialisatie van statische objecten
-Lab – Initialisatiecycli
oNog niet gepubliceerde bron
-Het verwijderen van arrays in C++
-Lab – Het combineren van `delete` en `delete[]`
•Valkuilen bij objectgeoriënteerd programmeren
oErfenis en object-slicing
oDe kopieeroperator implementeren
oDe kopieeroperator en veranderbaarheid
oVeranderlijkheid
-Veranderbare predikaatfunctieobjecten
-Lab – Veranderlijk predikaatfunctieobject
Gebruik van kwetsbare componenten
Beveiliging van door AI gegenereerde code
•Praktische aanvallen op tools voor het genereren van code
•Hallucinaties door afhankelijkheid via generatieve AI
•Casestudie – Een overzicht van de zwakke punten van GitHub Copilot (tot medio 2025)
•Casestudie – Agentic-codering en codebeveiliging (vanaf medio 2025)
Dag 3
Veelvoorkomende kwetsbaarheden in softwarebeveiliging
Invoervalidatie
•Beginselen voor invoervalidatie
•Blokkeerlijsten en toelatingslijsten
•Wat moet worden gecontroleerd – het aanvalsoppervlak
•Waar te valideren – verdediging in de diepte
•Wanneer moet je valideren – validatie versus transformaties
•Injectie
oCode-injectie
-OS-commando-injectie
-Lab – Command-injectie
-Aanbevolen werkwijzen voor het voorkomen van commando-injectie in besturingssystemen
-Command-injectie voorkomen met de juiste API’s
-Lab – Aanbevolen werkwijzen voor commando-injectie
-Lab – Experimenteren met commando-injectie in GenAI
-Casestudy – Command-injectie in de Zyxel IKE-pakketdecoder
•Problemen met het omgaan met gehele getallen
oWeergave van getekende getallen
oVisualisatie van gehele getallen
oInteger-promotie
oInteger-overloop
oLab – Overloop bij gehele getallen
oLab – Experimenteren met integer-overflow in GenAI
oCasestudie – Integer-underflows bij de verwerking van IPv6 in tcpip.sys
oVerwarring tussen ‘signed’ en ‘unsigned’
oCasestudy – DoS-aanval door verwarring tussen getekende en ongetekende waarden in DrayTek Vigor-routers
oLab – Verwarring tussen ‘signed’ en ‘unsigned’
oLab – Experimenteren met verwarring tussen getekende en ongetekende waarden in GenAI
oAfkapping van gehele getallen
oLab – Afkapping van gehele getallen
oLab – Experimenteren met het afkappen van gehele getallen in GenAI
oBest practices
-Upcasting
-Testen van randvoorwaarden
-Testen van postcondities
-Gebruik van bibliotheken voor grote gehele getallen
-Beste praktijken in C
-UBS: wijzigingen in de rekenregels
-Lab – Omgaan met integer-overflow op toolchain-niveau in C++
-Best practices in C++
-Oefening – Aanbevolen werkwijzen voor het omgaan met gehele getallen in C++
-Casestudy – Fout bij het controleren van gehele getallen in Skia
•Bestanden en streams

oPaddoorloop
oLab – Paddoorlopen
oVoorbeelden met betrekking tot het doorlopen van paden
oCasestudy – Bestandsvervalsing in WinRAR
oVirtuele bronnen
oAanbevolen werkwijzen voor paddoorloop
oLab – Kanonische pad
oLab – Experimenteren met paddoorloop in GenAI
•Problemen met stringformattering
oHet probleem met printf()
oLab - Stringformattering misbruiken
Samenvatting
Principes voor veilig programmeren
•Principes van robuuste programmering door Matt Bishop
•Principes voor veilig ontwerp van Saltzer en Schroeder
En wat nu?
•Bronnen over softwarebeveiliging en aanvullende literatuur
•Bronnen voor C en C++
•Generatieve AI – Bronnen en aanvullende richtlijnen.

Methodiek

Een blended learning-traject: live training onder begeleiding van een instructeur met laboefeningen in een eersteklas e-learningsysteem. Je houdt tot 3 maanden na de training toegang tot het e-learningsysteem om de laboefeningen en het materiaal opnieuw te bekijken.

29 practicumopdrachten en 9 casestudies.

Normen en referenties:
SEI CERT, CWE en Fortify Taxonomy.

Certificering

Na het volgen van deze training ontvangen deelnemers een certificaat van High Tech Institute.