Lancering van innovatieraketten, maar pas op voor de duisternis die voor ons ligt

Stel je een wereld voor waarin de software die je favoriete apps aanstuurt, je online transacties beveiligt en je digitale leven beheert, te slim af is en wordt overgenomen door een slim vermomd stukje code. Dit is geen plot uit de nieuwste cyberthriller; het is eigenlijk al jaren realiteit. Hoe dit zal veranderen – in positieve of negatieve richting – naarmate kunstmatige intelligentie (AI) een grotere rol gaat spelen in de softwareontwikkeling, is een van de grote onzekerheden die verband houden met deze dappere nieuwe wereld.

In een tijdperk waarin AI belooft een revolutie teweeg te brengen in de manier waarop we leven en werken, kan het gesprek over de gevolgen voor de veiligheid niet terzijde worden geschoven. Nu we steeds meer afhankelijk zijn van AI voor taken variërend van alledaags tot bedrijfskritisch, is de vraag niet langer alleen maar: ‘Kan AI cyberveiligheid vergroten?” (zeker!), maar ook “Kan AI gehackt worden?” (ja!), “Kan je AI gebruiken? hacken?” (natuurlijk!), en “Will AI veilige software produceren?” (nou ja…). Dit thought leadership-artikel gaat over dat laatste. Cydrill (een trainingsbedrijf voor veilig coderen) duikt in het complexe landschap van door AI geproduceerde kwetsbaarheden, met speciale aandacht voor GitHub Copilot, om de noodzaak van veilig coderen te onderstrepen. praktijken om onze digitale toekomst veilig te stellen.

Met deze short kunt u uw vaardigheden op het gebied van veilig coderen testen zelfbeoordeling.

De veiligheidsparadox van AI

De sprong van AI van academische nieuwsgierigheid naar een hoeksteen van moderne innovatie gebeurde nogal plotseling. De toepassingen bestrijken een adembenemend scala aan velden en bieden oplossingen die ooit sciencefiction waren. Deze snelle vooruitgang en adoptie hebben echter de ontwikkeling van overeenkomstige beveiligingsmaatregelen voorbijgestreefd, waardoor zowel AI-systemen als door AI gecreëerde systemen kwetsbaar zijn geworden voor een verscheidenheid aan geavanceerde aanvallen. Déjà vu? Dezelfde dingen gebeurden toen software – als zodanig – veel gebieden van ons leven overnam…

De kern van veel AI-systemen is machinaal leren, een technologie die afhankelijk is van uitgebreide datasets om te ‘leren’ en beslissingen te nemen. Ironisch genoeg is de kracht van AI – het vermogen om grote hoeveelheden gegevens te verwerken en te generaliseren – ook de achilleshiel. Het startpunt van 'wat we ook op internet vinden' is misschien niet de perfecte trainingsgegevens; Helaas is de wijsheid van de massa's in dit geval wellicht niet voldoende. Bovendien kunnen hackers, gewapend met de juiste tools en kennis, deze gegevens manipuleren om AI te misleiden tot het nemen van foutieve beslissingen of het ondernemen van kwaadwillige acties.

AI-copiloot

Copiloot in het vizier

GitHub Copilot, mogelijk gemaakt door OpenAI's Codex, is een bewijs van het potentieel van AI bij het coderen. Het is ontworpen om de productiviteit te verbeteren door codefragmenten en zelfs hele codeblokken voor te stellen. Meerdere onderzoeken hebben echter de gevaren benadrukt van het volledig vertrouwen op deze technologie. Er is aangetoond dat een aanzienlijk deel van de door Copilot gegenereerde code beveiligingsfouten kan bevatten, waaronder kwetsbaarheden voor veelvoorkomende aanvallen zoals SQL-injectie en bufferoverflows.

Het ‘Garbage In, Garbage Out’ (GIGO)-principe is hier bijzonder relevant. AI-modellen, waaronder Copilot, worden getraind op basis van bestaande gegevens, en net als bij elk ander groottaalmodel vindt het grootste deel van deze training plaats zonder toezicht. Als deze trainingsgegevens gebrekkig zijn (wat heel goed mogelijk is gezien het feit dat deze afkomstig zijn van open-sourceprojecten of grote vraag- en antwoordsites zoals Stack Overflow), kan de uitvoer, inclusief codesuggesties, deze fouten overnemen en verspreiden. In de begindagen van Copilot bleek uit een onderzoek dat ongeveer 40% van de codevoorbeelden die door Copilot werden geproduceerd toen hem werd gevraagd code te voltooien op basis van voorbeelden uit de CWE Top 25, kwetsbaar waren, wat het GIGO-principe en de noodzaak van een verhoogd veiligheidsbewustzijn onderstreepte. Een grootschaliger onderzoek in 2023 (Is de Copilot van GitHub net zo slecht als mensen in het introduceren van kwetsbaarheden in code?) had enigszins betere resultaten, maar nog steeds verre van goed: door de kwetsbare coderegel uit voorbeelden van kwetsbaarheden uit de echte wereld te verwijderen en Copilot te vragen deze te voltooien, werd de kwetsbaarheid ongeveer een derde van de tijd opnieuw gecreëerd en werd de kwetsbaarheid slechts ongeveer 1 keer opgelost. /4 van de tijd. Bovendien presteerde het zeer slecht op het gebied van kwetsbaarheden die verband hielden met ontbrekende invoervalidatie, waardoor telkens kwetsbare code werd geproduceerd. Dit benadrukt dat generatieve AI slecht is toegerust om met kwaadaardige input om te gaan als er geen 'silver bullet'-achtige oplossingen voor het omgaan met een kwetsbaarheid (bijvoorbeeld voorbereide verklaringen) beschikbaar zijn.

De weg naar veilige, door AI aangedreven softwareontwikkeling

Het aanpakken van de beveiligingsuitdagingen die AI en tools als Copilot met zich meebrengen, vereisen een veelzijdige aanpak:

  1. Kwetsbaarheden begrijpen: Het is essentieel om te erkennen dat door AI gegenereerde code vatbaar kan zijn voor dezelfde soorten aanvallen als ‘traditioneel’ ontwikkelde software.
  2. Veilig coderen naar een hoger niveau: Ontwikkelaars moeten worden getraind in veilige codeerpraktijken, rekening houdend met de nuances van door AI gegenereerde code. Dit omvat niet alleen het identificeren van potentiële kwetsbaarheden, maar ook het begrijpen van de mechanismen waarmee AI bepaalde codefragmenten suggereert, om effectief op de risico’s te kunnen anticiperen en deze te beperken.
  3. Aanpassing van de SDLC: Het is niet alleen technologie. Processen moeten ook rekening houden met de subtiele veranderingen die AI met zich meebrengt. Als het om Copilot gaat, staat codeontwikkeling meestal centraal. Maar ook vereisten, ontwerp, onderhoud, testen en operaties kunnen profiteren van grote taalmodellen.
  4. Continue waakzaamheid en verbetering: AI-systemen – net als de tools die ze aandrijven – evolueren voortdurend. Om gelijke tred te houden met deze evolutie betekent u op de hoogte blijven van het nieuwste beveiligingsonderzoek, inzicht krijgen in opkomende kwetsbaarheden en de bestaande beveiligingspraktijken dienovereenkomstig bijwerken.
AI-copiloot

Het navigeren door de integratie van AI-tools zoals GitHub Copilot in het softwareontwikkelingsproces is riskant en vereist niet alleen een mentaliteitsverandering, maar ook de adoptie van robuuste strategieën en technische oplossingen om potentiële kwetsbaarheden te beperken. Hier volgen enkele praktische tips om ontwikkelaars te helpen ervoor te zorgen dat hun gebruik van Copilot en soortgelijke AI-gestuurde tools de productiviteit verbetert zonder de veiligheid in gevaar te brengen.

Implementeer strikte invoervalidatie!

Praktische implementatie: Defensief programmeren vormt altijd de kern van veilige codering. Wanneer u codesuggesties van Copilot accepteert, vooral voor functies die gebruikersinvoer verwerken, dient u strikte invoervalidatiemaatregelen te implementeren. Definieer regels voor gebruikersinvoer, maak een toelatingslijst met toegestane tekens en gegevensformaten en zorg ervoor dat invoer wordt gevalideerd voordat deze wordt verwerkt. U kunt Copilot ook vragen dit voor u te doen; soms het werkt eigenlijk goed!

Beheer afhankelijkheden veilig!

Praktische implementatie: Copilot kan voorstellen om afhankelijkheden aan uw project toe te voegen, en aanvallers kunnen dit gebruiken om supply chain-aanvallen uit te voeren via “pakkethallucinatie”. Voordat u voorgestelde bibliotheken opneemt, moet u handmatig hun beveiligingsstatus verifiëren door te controleren op bekende kwetsbaarheden in databases zoals de National Vulnerability Database (NVD) of een softwarecompositieanalyse (SCA) uitvoeren met tools zoals OWASP Dependency-Check of npm-audit voor Node.js-projecten . Deze tools kunnen de beveiliging van afhankelijkheden automatisch volgen en beheren.

Voer regelmatig veiligheidsbeoordelingen uit!

Praktische implementatie: Ongeacht de bron van de code, of deze nu door AI is gegenereerd of met de hand is gemaakt, voer regelmatig code-reviews en -tests uit waarbij veiligheid centraal staat. Combineer benaderingen. Test statisch (SAST) en dynamisch (DAST), doe Software Composition Analysis (SCA). Voer handmatige tests uit en vul deze aan met automatisering. Maar vergeet niet om mensen boven instrumenten te stellen: geen enkel instrument of kunstmatige intelligentie kan de natuurlijke (menselijke) intelligentie vervangen.

Wees geleidelijk!

Praktische implementatie: Laat Copilot eerst uw opmerkingen of foutopsporingslogboeken schrijven; hierin is het al redelijk goed. Eventuele fouten hierin hebben sowieso geen invloed op de veiligheid van uw code. Als u eenmaal bekend bent met hoe het werkt, kunt u het geleidelijk steeds meer codefragmenten laten genereren voor de daadwerkelijke functionaliteit.

Bekijk altijd wat Copilot te bieden heeft!

Praktische implementatie: Accepteer nooit zomaar blindelings wat Copilot suggereert. Vergeet niet dat jij de piloot bent, het is “slechts” de Tweede piloot! Jij en Copilot kunnen samen een zeer effectief team zijn, maar jij bent nog steeds de baas, dus je moet weten wat de verwachte code is en hoe de uitkomst eruit zou moeten zien.

Experiment!

Praktische implementatie: Probeer verschillende dingen en aanwijzingen uit (in de chatmodus). Probeer Copilot te vragen de code te verfijnen als u niet tevreden bent met wat u heeft gekregen. Probeer te begrijpen hoe Copilot in bepaalde situaties “denkt” en besef de sterke en zwakke punten ervan. Bovendien wordt Copilot met de tijd beter – experimenteer dus voortdurend!

Blijf op de hoogte en leer!

Praktische implementatie: Leer uzelf en uw team voortdurend op de hoogte van de nieuwste beveiligingsbedreigingen en best practices. Volg beveiligingsblogs, woon webinars en workshops bij en neem deel aan forums gewijd aan veilige codering. Kennis is een krachtig hulpmiddel bij het identificeren en beperken van potentiële kwetsbaarheden in code, al dan niet door AI gegenereerd.

Conclusie

Het belang van veilige codeerpraktijken is nog nooit zo belangrijk geweest nu we door de onbekende wateren van door AI gegenereerde code navigeren. Tools zoals GitHub Copilot bieden aanzienlijke kansen voor groei en verbetering, maar ook specifieke uitdagingen als het gaat om de beveiliging van uw code. Alleen door deze risico's te begrijpen, kunnen we effectiviteit en veiligheid met succes verzoenen en onze infrastructuur en gegevens beschermen. Tijdens deze reis blijft Cydrill zich inzetten om ontwikkelaars te voorzien van de kennis en tools die nodig zijn om een ​​veiligere digitale toekomst op te bouwen.

Cydrill's blended learning-traject biedt training in proactieve en effectieve veilige codering voor ontwikkelaars van Fortune 500-bedrijven over de hele wereld. Door training onder leiding van een instructeur, e-learning, praktijkgerichte labs en gamificatie te combineren, biedt Cydrill een nieuwe en effectieve aanpak om veilig te leren coderen.

Bekijk de veilige codeercursussen van Cydrill.

Thijs Van der Does