Evaluating and Preventing Security Smells in AI-Generated Ansible Code
Dit artikel onthult dat door AI gegenereerde Ansible-code inherent beveiligingskwetsbaarheden bevat, maar toont aan dat het integreren van beveiligingsbenchmarks in prompts via een uitgebreid CO-STAR-framework de naleving en codekwaliteit aanzienlijk kan verbeteren, waarbij de beste modellen bijna perfecte beveiligingsstandaarden bereiken zonder hertraining.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
In de moderne digitale wereld is de ruggengraat van bijna elke online dienst een enorme, onzichtbare laag van computers en software die bekend staat als infrastructuur. Decennialang vereiste het opzetten van deze infrastructuur teams van ingenieurs die handmatig servers, databases en beveiligingsinstellingen moesten configureren, een traag en foutgevoelig proces. Om dit op te lossen, adopteerde de industrie een methode genaamd "Infrastructure as Code", waarbij de volledige opstelling wordt uitgeschreven in tekstbestanden, vergelijkbaar met een gedetailleerd recept of een blauwdruk. Deze tekstbestanden vertellen computers precies hoe ze een systeem moeten bouwen en beveiligen, wat zorgt voor een snelle, consistente en geautomatiseerde implementatie. Echter, net zoals een recept met een ontbrekend ingrediënt een maaltijd kan verpesten, kan één fout in deze codebestanden een systeem wagenwijd openzetten voor hackers. Als de code verborgen zwakheden bevat, zoals onversleutelde wachtwoorden of overmatig ruime toegangsrechten, worden die gebreken direct overgedragen naar het live systeem op het moment dat het wordt ingeschakeld.
Onlangs is er een nieuw hulpmiddel in dit veld terechtgekomen: kunstmatige intelligentie- programmeerassistenten. Deze programma's kunnen een eenvoudig verzoek in gewone mensentaal lezen en automatisch de complexe code schrijven die nodig is om deze systemen te bouwen. Hoewel dit belooft de ontwikkeling te versnellen, roept het een kritische vraag op die tot nu toe nooit beantwoord was: houdt de code die deze machines schrijven de systemen daadwerkelijk veilig? De onderzoekers aan de Universiteit van Waikato in Nieuw-Zeeland gingen op zoek naar het antwoord. Ze zochten niet alleen naar bugs; ze onderzochten of de door deze AI-tools gegenereerde code voldeed aan de strikte, realistische beveiligingsnormen die door overheden en industrieën worden vereist om gegevens te beschermen. Hun werk onthult een schokkende kloof tussen wat deze AI-tools kunnen en wat ze daadwerkelijk doen wanneer ze aan hun lot worden overgelaten, en het biedt een duidelijk pad om het probleem op te lossen voordat er ook maar één regel code wordt geïmplementeerd.
Het team begon met het testen van het standaardgedrag van zestien verschillende AI-modellen. Ze vroegen elk model om een specifieke reeks instructies te schrijven, een zogenaamde Ansible role, om twee veelvoorkomende soorten software op te zetten: een webserver genaamd Apache Tomcat en een databasesysteem genaamd MongoDB. Ze gaven de modellen geen bijzonder beveiligingsadvies, geen waarschuwingen over wat te vermijden, en geen voorbeelden van goede code. Ze vroegen de machines simpelweg om de taak uit te voeren. De resultaten waren onmiddellijk en zorgwekkend. Elk van de zestien modellen produceerde code die beveiligingsfouten bevatte. Deze gebreken omvatten hard-coded wachtwoorden die voor iedereen leesbaar zijn, ontbrekende bescherming voor gevoelige bestanden, en een gebrek aan foutafhandeling dat kan leiden tot het crashen van het systeem of onvoorspelbaar gedrag. Wanneer de onderzoekers deze AI-gegenereerde code vergeleken met code geschreven door menselijke ontwikkelaars uit publieke repositories, presteerde de AI-code slechter. Het was niet slechts licht gebrekkig; het was fundamenteel onveilig en voldeed niet aan de basisveiligheidseisen die standaard zijn in de sector.
De onderzoekers onderzochten vervolgens waarom dit gebeurde. Ze ontdekten dat het probleem niet noodzakelijkerwijs lag bij het onvermogen van de AI-modellen om code te schrijven, maar dat ze het vermogen misten om complexe instructies met betrekking tot veiligheid op te volgen. In een tweede fase van het onderzoek veranderde het team hun aanpak. In plaats van alleen om code te vragen, voorzagen ze de modellen van een zeer gestructureerde set regels. Ze gebruikten een uitgebreide versie van een prompting-framework die expliciet beveiligingspraktijken en specifieke overheidsveiligheidsnormen opsomde. Ze vertelden de modellen precies welke rechten ze moesten instellen, hoe ze wachtwoorden veilig moesten beheren en welke documentatie ze moesten opnemen, waarbij ze deze vereisten behandelden als verplichte beperkingen in plaats van suggesties. Deze verschuiving van een eenvoudig verzoek naar een gedetailleerde, op regels gebaseerde instructie veranderde de uitkomst drastisch.
Toen de onderzoekers deze gestructureerde aanpak toepasten, verbeterden de resultaten aanzienlijk. Vier van de zestien modellen waren in staat om de complexe instructies op te volgen en code te genereren die vrij was van de beveiligingsfouten die in de eerste ronde werden gezien. Het best presterende model produceerde code die tussen de vijfentwintig en honderd procent van de strikte beveiligingsbenchmarks voldeed, een enorme sprong ten opzichte van de baseline. Sterker nog, dit top AI-model presteerde beter dan de gemiddelde door mensen geschreven code, die slechts tussen de drieentwintig en drieëndertig procent van dezelfde standaarden voldeed. De studie toonde aan dat voor deze capabele modellen het probleem niet een gebrek aan kennis was, maar een gebrek aan het vermogen om die kennis toe te passen wanneer de instructies vaag waren. Wanneer de regels duidelijk waren en de beperkingen expliciet, kon de AI in één enkele poging veilige, hoogwaardige code synthetiseren, waardoor de noodzaak voor tijdrovende reparaties nadat de code al geschreven was, werd geëlimineerd.
De studie benadrukte ook een cruciaal onderscheid tussen de modellen. De vier succesvolle modellen waren allemaal closed-source systemen, wat betekent dat hun interne werking niet openbaar is, terwijl veel van de open-source modellen er niet in slaagden de complexe instructies op te volgen. Dit suggereert dat het vermogen om veilige code te genereren sterk afhangt van hoe het model is getraind en de specifieke capaciteiten die het tijdens die training heeft ontwikkeld, in plaats van alleen van de grootte van het geheugen of het aantal parameters. De onderzoekers ontdekten dat de modellen die slaagden in staat waren om de meerlaagse instructies te analyseren, het verschil te begrijpen tussen verplichte regels en aanbevolen praktijken, en deze consistent toe te passen op de code. De modellen die faalden, zelfs de modellen met hoge scores op andere coderingstests, konden de meervoudige beperkingen die nodig zijn om een veilig systeem te bouwen, simpelweg niet vasthouden.
Dit werk daagt de huidige manier waarop de industrie met beveiliging omgaat uit. Traditioneel wachten beveiligingsexperts tot de code is geschreven en scannen deze dan om fouten te vinden en te herstellen, een proces dat bekend staat als detectie. De onderzoekers stellen dat deze aanpak voor AI-gegenereerde code onvoldoende is, omdat de gebreken worden geïntroduceerd op het moment dat de code wordt gecreëerd. In plaats daarvan stellen zij een methode van preventie voor, waarbij beveiligingseisen direct in het generatieproces zelf worden ingebouwd. Door veiligheidsregels direct in de instructies te verankeren die aan de AI worden gegeven, kunnen organisaties ervoor zorgen dat de code vanaf het begin veilig is. Deze aanpak vereist geen hertraining van de AI-modellen of het veranderen van hun onderliggende architectuur; het vereist alleen een verandering in hoe mensen met hen communiceren. De studie concludeert dat hoewel AI-programmeerassistenten grote belofingen inhouden, ze niet kunnen worden vertrouwd om veilige infrastructuur te genereren zonder duidelijke, expliciete begeleiding. Met de juiste prompts kunnen ze echter code produceren die niet alleen functioneel is, maar ook veiliger dan wat veel menselijke ontwikkelaars vandaag de dag produceren.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.