Mjukvaruutveckling och programmering, som en gång betraktades som strävanden som krävde djup expertis, kan nu utföras av alla som använder naturligt språk. En funktion som tidigare tog dagar eller månader att utveckla kan nu utvecklas på minuter eller timmar tack vare kod från en AI-modell. Till exempel är OpenAI Codex och Google BERT utbildade i programmering av webbbloggar, Stack overflow-frågor, etc.
Dessa intelligenta modeller skapar kod genom matematiska sannolikheter samtidigt som de också är kända för att hallucinera och presentera falsk information. En forskning gjord av akademin hävdar att generering av AI-kod är den främsta orsaken till de 10 största sårbarheterna och nästan 40 % av koden har säkerhetsbuggar . Många av de ledande spelarna, tillsammans med nya SaaS-leverantörer, utnyttjar AI för att göra sina erbjudanden smartare. Även SaaS-programmerare måste vara mer kunniga om AI-baserade SaaS-verktyg.
Att följa programmeringsstandarder och kodkvalitet kräver mjukvarusäkerhet. Men AI-modeller tränas på varje bit av information som finns tillgänglig på internet. Kodkvaliteten, tillförlitligheten, säkerheten och mer kan skilja sig från den som genereras av mänskliga utvecklare. En modell utbildad i webbutvecklingsexempel kan till exempel innehålla dåliga datavalideringspraxis. Denna brist på validering kan leda till säkerhetsproblem när modellen genererar kod som använder samma dåliga metoder.
Oavsett storlek (miljoner eller miljarder parametrar) är modellerna kända för att hallucinera och göra felaktiga förutsägelser. När en typisk utvecklare ser koden som en AI producerar kommer de att missa de subtila men allvarliga säkerhetsbristerna. Men för en utvecklare som har fullständig kunskap om design och utvecklingsmönster, är brister en recension bort från att identifieras. Utvecklare kan utnyttja dessa mönster för att upptäcka sårbarheter och anpassa sig till bästa SaaS-säkerhetsmetoder .
Moderna ramverk och bibliotek är starkt beroende av gränssnitt/enum för slutledning och validering. Detta garanterar att koden gör sitt jobb korrekt och ålägger säkerhet. AI-genererad kod kommer inte att dra slutsatser om vi inte styr den. Även efter att ha skapat en noggrann uppmaning kanske typfelmatchning och valideringsupprätthållande inte matchar användningsfallet. För att lokalisera och ändra kodfel måste utvecklare vara väl medvetna om domänen och affärskraven.
def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result
Program delar objekt på offentliga/privata/skyddade sätt. Funktioner och klasser av högre ordning ärver objekttillstånd genom att komma åt offentliga/skyddade variabler direkt för att utföra beräkningar. Om något görs felaktigt i implementering eller exekvering kan säkerhets- eller prestandaflaskhalsar lätt uppstå. SaaS-utvecklare måste implementera sin logik för tillstånd och kontexthantering på lämpligt sätt och granska den för korrekt och säker användning.
class InsecureClass: def __init__(self, owner, balance, password): self.owner = owner # Public attribute self._balance = balance # Protected attribute self.__password = password # Private attribute # Public def def get_balance(self): return self._balance # Protected def def _update_balance(self, amount): self._balance += amount # Private def def __validate_password(self, input_password): return self.__password == input_password # Insecure def exposing private data def insecure_password_exposure(self): return self.__password
Tjänster delar och tar emot information över nätverket. Dessa dagar har säker anslutning och datahantering varit avgörande för framgången för molnbaserade system. När man läser, bearbetar och delar känslig data om organisationer genom distribuerade datanätverk måste starka protokoll och säkerhetstekniker finnas på plats för att förhindra dataavlyssning . Med hjälp av AI måste SaaS-utvecklaren implementera varje enskild aspekt av arkitekturen i fullfjädrade applikationer.
#Insecure Data Sharing @app.route("/user/<int:user_id>", methods=["GET"]) def get_user(user_id): user = users.get(user_id) if user: return jsonify(user) # All user data exposed, including secrets # Insecure Data Handling @app.route("/update_email", methods=["POST"]) def update_email(): data = request.json() user_id = data.get("user_id") new_email = data.get("new_email") if user_id in users: users[user_id]["email"] = new_email # No validation of new_email return jsonify({"message": "Email updated successfully"})
I dagens cyberkänsliga värld, tight
# Insecure authentication @app.route("/login", methods=["POST"]) def login(): data = request.json() email = data.get("email") password = data.get("password") for user_id, user in users.items(): if user["email"] == email and user["password"] == password: return jsonify({"message": "Login successful", "user_id": user_id})
AI-programmering styrs av bibliotek och ramverk gjorda av gemenskapen och öppen källkod. Människor stödjer ny teknik genom att använda dessa lovande verktyg och skapa nya. Data som dessa modeller tränades på är inte uppdaterade och modellens funktioner är frusna, och det är deras kunskap också. Med teknikens utveckling kommer många funktioner att bli föråldrade och vissa bibliotek kommer inte att vara relevanta för nuvarande behov. En SaaS-utvecklare har till uppgift att granska och använda giltiga beroenden för att säkerställa funktionalitet och säkerhet.
import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()
De avancerade kodningsmöjligheterna hos stora språkmodeller beror på deras omfattande matematiska beräkningar. Inga snygga tekniker behövs för att göra den kompatibel med säkerhets- och programmeringsstandarder. Vi kan använda dessa enkla kontroller för att göra AI-genererad kod säker och kompatibel med standarder:
Oavsett hur noggrant vi granskar och granskar koden, finns risken för mänskliga fel alltid där. Att enbart förlita sig på manuella granskningar är inte tillräckligt eftersom vi behöver ha några fördefinierade kontroller som kan testa och validera koden så fort den kommer in i versionskontrollsystemet. Vad passar bättre än att lägga till en Github-åtgärd som automatiskt kör säkerhets- och kvalitetskontroller när en PR höjs.
name: Simple Security Checks for AI generated Code on: push: branches: - main pull_request: branches: - main jobs: security-and-quality-check: runs-on: ubuntu-latest Steps: - name: Repository checkout uses: actions/checkout@v3 - name: Python setup uses: actions/setup-python@v4 with: python-version: ">=3.9" - name: Dependency installation run: | python -m pip install --upgrade pip pip install bandit pytest - name: Identifying insecure libraries and patterns run: | echo "Checking for insecure patterns..." if grep -r "md5.new(" .; then echo "ERROR: Insecure MD5 hashing detected. Use hashlib.sha256 or bcrypt instead." exit 1 fi echo "No insecure patterns detected." - name: Scanning for security vulnerabilities run: | echo "Running Bandit security scanner..." bandit -r . - name: Running unit tests run: | echo "Running unit tests..." pytest test/unit --cmodopt=local - name: Notifying on failure if: failure() run: | send_slack_notification(“Unsafe code merge detected, fix immediately”)
Stora språkmodeller är ganska användbara verktyg för SaaS-utvecklare för att generera kod och information med naturliga uppmaningar. De utgör dock säkerhetsrisker och levererar ibland icke-presterande kod som inte passar företagets behov. SaaS-utvecklare måste vara mycket försiktiga när de använder dessa verktyg och implementerar AI-genererad kod för verkliga användningsfall. Den här praktiska guiden fokuserar på de faktorer som uppstår och påverkar säkerhetsställningen samtidigt som den visar hur man kan övervinna dessa utmaningar.