paint-brush
Je váš kód vygenerovaný AI skutočne bezpečný?podľa@danielcrouch
Nová história

Je váš kód vygenerovaný AI skutočne bezpečný?

podľa Daniel7m2025/03/19
Read on Terminal Reader

Príliš dlho; Čítať

Kód vygenerovaný AI je hlavnou príčinou 10 najčastejších zraniteľností a takmer 40 % kódu obsahuje bezpečnostné chyby. Modely AI sú trénované na každom kúsku informácií dostupných na internete. Kvalita kódu, spoľahlivosť, bezpečnosť a ďalšie sa môžu líšiť od kódu, ktorý generujú ľudskí vývojári.
featured image - Je váš kód vygenerovaný AI skutočne bezpečný?
Daniel HackerNoon profile picture
0-item

Vývoj softvéru a programovanie, ktoré sa kedysi považovalo za úsilie, ktoré si vyžadovalo hlboké odborné znalosti, môže teraz robiť každý, kto používa prirodzený jazyk. Funkciu, ktorej vývoj predtým trval niekoľko dní alebo mesiacov, je teraz možné vyvinúť v priebehu niekoľkých minút alebo hodín vďaka kódu z modelu AI. Napríklad OpenAI Codex a Google BERT sú vyškolení na programovanie webových blogov, otázky týkajúce sa preplnenia zásobníka atď.


Tieto inteligentné modely vytvárajú kód prostredníctvom matematických pravdepodobností, pričom je tiež známe, že halucinujú a prezentujú nepravdivé informácie. Výskum uskutočnený akademickou obcou tvrdí, že generovanie kódu AI je hlavnou príčinou 10 najčastejších zraniteľností a takmer 40 % kódu má bezpečnostné chyby . Mnohí z popredných hráčov spolu s novými poskytovateľmi SaaS využívajú AI na to, aby boli ich ponuky inteligentnejšie. Aj programátori SaaS musia byť viac informovaní o nástrojoch SaaS založených na AI.

Čo robí kód vygenerovaný AI nebezpečným?

Dodržiavanie programovacích štandardov a kvality kódu určuje bezpečnosť softvéru. Modely AI sú však trénované na každom kúsku informácií dostupných na internete. Kvalita kódu, spoľahlivosť, bezpečnosť a ďalšie sa môžu líšiť od kódu, ktorý generujú ľudskí vývojári. Model vyškolený na príkladoch vývoja webu môže napríklad obsahovať zlé postupy overovania údajov. Tento nedostatok overenia môže viesť k bezpečnostným problémom, keď model generuje kód, ktorý používa rovnaké zlé postupy.

5 indikátorov, ktoré naznačujú, že kód obsahuje slabé stránky zabezpečenia

Bez ohľadu na veľkosť (milión alebo miliarda parametrov) je známe, že modely majú halucinácie a robia nesprávne predpovede. Keď typický vývojár uvidí kód, ktorý vytvára AI, uniknú mu jemné, ale závažné bezpečnostné chyby. Avšak pre vývojára, ktorý má kompletné znalosti o dizajne a vývojových vzorcoch, sú chyby ďaleko od toho, aby boli identifikované. Vývojári môžu využiť tieto vzory na odhalenie slabých miest a zosúladenie s osvedčenými postupmi zabezpečenia SaaS .

1. Vyvodenie typu a overenia vstupu sa nevynucujú

Moderné rámce a knižnice sa pri odvodzovaní a overovaní do veľkej miery spoliehajú na rozhranie/enum. To zaručuje, že kód robí svoju prácu presne a vyžaduje bezpečnosť. Kód vygenerovaný AI nebude odvodzovať, pokiaľ ho nenasmerujeme. Dokonca aj po vytvorení dôkladnej výzvy sa nezhoda typu a vynútenie overenia nemusia zhodovať s prípadom použitia. Aby vývojári našli a upravili nezhody v kóde, musia si byť dobre vedomí požiadaviek domény a podnikania.


 def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result

2. Neštandardné zdieľanie stavu a kontextu medzi triedami/objektmi

Programy zdieľajú objekty verejným/súkromným/chráneným spôsobom. Funkcie a triedy vyššieho rádu dedia stav objektu priamym prístupom k verejným/chráneným premenným na vykonávanie výpočtov. Ak sa pri implementácii alebo vykonávaní niečo urobí nesprávne, ľahko sa môžu vyskytnúť problémy so zabezpečením alebo výkonom. Vývojári SaaS musia vhodne implementovať svoju logiku správy stavu a kontextu a skontrolovať ju pre správne a bezpečné použitie.


 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

3. Slabá implementácia techník spracovania a zdieľania údajov

Služby zdieľajú a prijímajú informácie cez sieť. Bezpečné pripojenie a manipulácia s údajmi sú v súčasnosti kľúčové pre úspech cloudových systémov. Pri čítaní, spracovaní a zdieľaní citlivých údajov o organizáciách prostredníctvom distribuovaných dátových sietí musia byť zavedené silné protokoly a bezpečnostné techniky, aby sa zabránilo zachytávaniu údajov . Pomocou AI musí vývojár SaaS implementovať každý jeden aspekt architektúry do plnohodnotných aplikácií.


 #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"})

4. Neadekvátne spracovanie tajomstiev a autorizácie

V dnešnom kyberneticky citlivom svete, tesný Implementácia RBAC je nevyhnutnosťou pre riadenie prístupu na zabezpečenie identity pri zachovaní súkromia a súladu. Keď kód vygeneruje LLM, štandardne bude existovať mechanizmus, ktorý sa pripojí a overí s poskytovateľom auth so základnou implementáciou. Jednoduché riešenia nestačia na to, aby ste zostali v bezpečí pred vznikajúcimi kybernetickými hrozbami. Pri pridávaní vlastných funkcií musia vývojári dôkladne otestovať, aby sa zabezpečilo, že je prísne implementované zabezpečenie a spracovanie autorizácie.


 # 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})

5. Zastarané závislosti so zastaraným používaním funkcií

Programovanie AI je riadené knižnicami a rámcami vytvorenými komunitou a open-source. Ľudia podporujú nové technológie používaním týchto sľubných nástrojov a vytváraním nových. Údaje, na ktorých boli tieto modely trénované, nie sú aktuálne a schopnosti modelu sú zmrazené, rovnako ako ich znalosti. S rozvojom technológie bude veľa funkcií zastaraných a niektoré knižnice nebudú relevantné pre súčasné potreby. Úlohou vývojára SaaS je kontrolovať a používať platné závislosti na zaistenie funkčnosti a bezpečnosti.


 import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()

Tipy na bezpečné používanie kódu vygenerovaného AI

Pokročilé možnosti kódovania veľkých jazykových modelov sú spôsobené ich rozsiahlymi matematickými výpočtami. Na to, aby vyhovoval bezpečnostným a programovacím štandardom, nie sú potrebné žiadne vymyslené techniky. Môžeme použiť tieto jednoduché kontroly, aby bol kód vygenerovaný AI bezpečný a v súlade s normami:


  1. Kontrola kódu s bezpečnostnými a architektonickými tímami by mala byť štandardnou súčasťou vášho životného cyklu.
  2. Integrujte automatizované bezpečnostné testovanie a overovacie kroky do nástrojov na správu verzií.
  3. Zahrňte do testovania KPI kontroly závislosti a súladu.
  4. Prijmite architektúru Zero-Trust so statickými a dynamickými nástrojmi na testovanie bezpečnosti.
  5. Využite postupy DevSecOps a tieňovú AI.

Spracovanie nebezpečného kódu generovaného AI pomocou jednoduchej akcie Github

Bez ohľadu na to, ako starostlivo kontrolujeme a kontrolujeme kód, vždy existuje šanca na ľudskú chybu. Spoliehať sa len na manuálne audity nestačí, pretože potrebujeme mať nejaké preddefinované kontroly, ktoré dokážu otestovať a overiť kód hneď, ako vstúpi do systému správy verzií. Čo je lepšie skontrolovať, ako pridať akciu Github, ktorá automaticky spustí kontroly bezpečnosti a kvality, keď sa zvýši PR.


 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”)

Záver

Veľké jazykové modely sú celkom užitočnými nástrojmi pre vývojárov SaaS na generovanie kódu a informácií s prirodzenými výzvami. Predstavujú však bezpečnostné riziká a niekedy poskytujú nevýkonný kód, ktorý nevyhovuje potrebám podniku. Vývojári SaaS musia byť veľmi opatrní pri používaní týchto nástrojov a implementácii kódu generovaného AI pre prípady použitia v reálnom živote. Táto praktická príručka sa zameriava na faktory, ktoré vznikajú a ovplyvňujú stav bezpečnosti, pričom ukazuje, ako tieto výzvy prekonať.