Unità 11 / 12

Verifica del codice, vulnerabilità e rischi dell'output dell'intelligenza artificiale

Guadagni:

  • Capacità di verificare l'output dell'intelligenza artificiale su tre livelli: accuratezza, sicurezza e origine/licenza
  • Capacità di coprire rischi come iniezioni, pacchetti di allucinazioni e segreti sepolti con stampi e strumenti sicuri
  • Capacità di presentare il codice critico per la sicurezza all'approvazione di un ingegnere competente e comprendere la non trasferibilità della responsabilità

Generare codice AI è facile; Affidarsi a lui è costoso. L'unico scopo di questa unità è trasformare il principio della "verifica", che abbiamo ripetuto in tutte le unità precedenti, in una disciplina ingegneristica sistematica. Perché il codice prodotto dall’intelligenza artificiale, anche se a prima vista sembra corretto, comporta tre pericoli distinti: essere non funzionante/errato (allucinazione), essere insicuro (vulnerabilità) e comportare rischi legali/di licenza. Conoscere questi tre e stabilire una porta per ciascuno di essi ti rende un professionista.

Qui consideriamo la “convalida” su tre livelli: correttezza (il codice fa effettivamente il suo lavoro?), sicurezza (resiste a input dannosi?) e provenienza/licenza (ho il diritto di utilizzare questo codice?). Ogni livello ha i propri mezzi di controllo e nessuno di essi può essere aggirato con "questo è quello che ha detto l'intelligenza artificiale".

Tre livelli di rischio

1. Rischio di accuratezza (allucinazione). Il modello può chiamare una funzione inesistente, utilizzare in modo improprio un'API, ignorare silenziosamente un caso limite. Il codice sembra "ragionevole" ma è sbagliato. Antidoto: compilazione, test, analisi statica e ispezione visiva.

2. Rischio per la sicurezza. L'intelligenza artificiale può ripetere modelli non sicuri nei dati di addestramento: query vulnerabili all'iniezione SQL, input dell'utente non autenticato, crittografia debole, deserializzazione non sicura, reindirizzamento aperto. Il codice funziona ma è vulnerabile agli attacchi. Antidoto: revisione incentrata sulla sicurezza, scanner automatizzati (SAST) e imposizione di modelli di sicurezza noti.

3. Rischio fonte/licenza. L'intelligenza artificiale può produrre output che somigliano molto a codice protetto da copyright o concesso in licenza restrittiva, oppure può suggerire una dipendenza con licenza inappropriata. Antidoto: controllo delle dipendenze e delle licenze, controllo dell'originalità, politica aziendale.

Attenzione: il più insidioso di questi tre rischi è la sicurezza; perché il codice può superare i test, funzionare senza problemi in produzione e la vulnerabilità viene rivelata solo quando un utente malintenzionato la trova. “Lavorare” non è la stessa cosa di “sicuro”.

Passo dopo passo: Porta di autenticazione a più livelli

  1. Leggere con comprensione. Comprendere realmente il codice prima di accettarlo; Non unire il codice che non capisci. Se non puoi spiegare "perché funziona", non è stato ancora convalidato.
  2. Verifica che esista. Confermare che ogni funzione, API e pacchetto utilizzato esista effettivamente e venga utilizzato correttamente (porta delle allucinazioni).
  3. Esegui strumenti automatizzati. Compilatore, linter (scanner di stile/errore), controllo del tipo, test unitari e, se possibile, un SAST (Static Application Security Testing: strumento che esegue la scansione del codice sorgente per individuare eventuali vulnerabilità).
  4. Guardalo dal punto di vista della sicurezza. L'input è convalidato? La query è parametrizzata? Il segreto è sepolto? Esiste un controllo delle autorizzazioni?
  5. Controlla fonte e licenza. Le nuove dipendenze sono concesse in licenza? L'output sembra eccessivamente simile a una base di codice conosciuta?
  6. Se è fondamentale per la sicurezza, chiedi l'approvazione di un esperto. È obbligatoria una revisione indipendente da parte di un ingegnere competente in aree quali autenticazione, pagamento, crittografia e controllo degli accessi.

Tre mini custodie

Caso 1: SQL injection catturata al cancello di ispezione. Il codice generato dall'intelligenza artificiale che concatena l'input dell'utente direttamente nella query SQL per un endpoint di ricerca ("... WHERE name = '" + q + "'"). Il codice funzionava e ha superato il test. L'ispezione focalizzata sulla sicurezza e la scansione SAST hanno rilevato questo; È stata convertita in una query con parametri (istruzione preparata). Se non fosse stato scoperto, si sarebbe trattato di una classica vulnerabilità legata alla fuga di dati.

Caso 2 – Pacchetto allucinazioni. L'intelligenza artificiale ha suggerito un pacchetto npm (fast-safe-parse) inesistente per un'attività. Quando lo sviluppatore ha provato a installarlo, il pacchetto non è stato trovato. Peggio ancora: in alcuni casi, gli aggressori possono riempire i nomi di pacchetti "fantasma" con pacchetti reali e dannosi (confusione delle dipendenze). Lezione: verificare ogni pacchetto consigliato rispetto al registro ufficiale e alla cronologia di download/manutenzione.

Caso 3 — Incompatibilità della licenza. Un'elegante libreria complementare suggerita da AI aveva una forte licenza copyleft che era incompatibile con la licenza del prodotto dell'istituzione. La scansione della licenza di dipendenza ha segnalato questo; Il team ha sostituito la licenza con un'alternativa adeguata. Senza verifica si creerebbe un onere giuridico nella distribuzione dei prodotti.

Quattro modelli copiabili

Autocontrollo pre-ricovero:

Prima di accettare il seguente codice generato dall'intelligenza artificiale, controlla: 1) Ogni funzione/API/pacchetto utilizzato esiste effettivamente? Segnala i sospetti.2) Sono presenti input non convalidati, concatenazione SQL/comandi, segreti nascosti, crittografia debole?3) Quali sono i bug/casi limite non risolti? Etichetta ogni risultato come "certo/probabile" e suggerisci soluzioni.{{code}}

Revisione focalizzata sulla sicurezza:

Esamina questo codice con un occhio attento alla sicurezza. Cerca le vulnerabilità comuni in stile OWASP: injection, autenticazione/autorizzazione interrotta, divulgazione di dati sensibili, deserializzazione non sicura, reindirizzamento non autenticato. Per ciascun rilievo: rischio, scenario di sfruttamento, bonifica. Questa è una proiezione preliminare; sottopone i risultati critici alla revisione della sicurezza umana.{{code}}

Controllo delle dipendenze e delle licenze:

Elenca le dipendenze aggiunte/suggerite da questo codice. Per ciascuno: il pacchetto esiste effettivamente, è mantenuto, quale sarebbe la sua licenza tipica (DEVE ESSERE VERIFICATO) ed è effettivamente necessario per il progetto o è possibile farlo con uno strumento esistente?{{codice o elenco delle dipendenze}}

Posa sicura della cassaforma (in produzione):

Scrivi il codice per {{task}}. Regole di sicurezza OBBLIGATORIE:- Convalida/ripulisci tutti gli input esterni.- Utilizza solo query con parametri nell'accesso al database.- Non incorporare segreti nel codice; assumere variabile di ambiente/gestore segreto - Non ingoiare errori; Consideralo in modo significativo. Spiega come il codice rispetta queste regole in 3 punti.

Prompt debole / Prompt forte

Debole: "Scrivi una query che cerca per nome utente." (Potrebbe verificarsi un codice vulnerabile all'iniezione.)
Forte: "Scrivi una funzione che cerca per nome utente. Non unire mai l'input dell'utente in una query come una stringa; usa una query con parametri (istruzione preparata). Convalida l'input per lunghezza e carattere. Spiega in 2 frasi perché il codice è chiuso all'iniezione."

La versione forte impone fin dall’inizio il modello sicuro; Pertanto, garantisce che la vulnerabilità non si verifichi affatto, anziché rilevarla in un secondo momento. Tuttavia, è essenziale far passare il codice generato attraverso le porte di verifica.

Livello di autenticazione

Strumento/metodo

"L'intelligenza artificiale ha detto" è sufficiente?

precisione

Compilazione, testing, ispezione visiva

no

Realtà API/pacchetto

Controllo ufficiale di documenti/registrazioni

no

Sicurezza

SAST, revisione della sicurezza

no

Licenza/fonte

Controllo delle dipendenze e delle licenze

no

Logica critica per la sicurezza

Approvazione di un ingegnere esperto

Assolutamente no

La responsabilità non può essere trasferita

La responsabilità per errori, vulnerabilità o violazioni derivanti dal codice prodotto da uno strumento di intelligenza artificiale appartiene al team che assembla e distribuisce tale codice, non al fornitore dello strumento. Questo è un fatto professionale oltre che giuridico: tu firmi. Quindi “l’IA l’ha prodotto” non è una scusa, ma una giustificazione per ulteriore cautela. In particolare nei sistemi critici per la sicurezza, l'output dell'intelligenza artificiale non sostituisce in nessun caso la revisione e l'approvazione da parte di un ingegnere qualificato; Nella migliore delle ipotesi, l’intelligenza artificiale fornisce un progetto che accelera l’attività dell’ingegnere.

Suggerimento: crea una breve lista di controllo per il tuo team che chiami "cancello di convalida per il codice generato dall'intelligenza artificiale" (creazione + test + scansione di sicurezza + ispezione visiva). Una volta che questo cancello diventa un’abitudine, la perdita di velocità è minima e la riduzione del rischio è massima.

Errori comuni

  • Confondere "funziona" con "sicuro". Il codice che supera i test può essere vulnerabile agli attacchi.
  • Utilizzo del pacchetto/API senza verificarlo. I pacchetti allucinatori corrompono e rappresentano un rischio per la sicurezza.
  • Bypassare gli strumenti automatizzati. Linter, type checker e SAST catturano a buon mercato ciò che manca agli umani.
  • Ignorando la licenza. La dipendenza da licenze improprie crea oneri legali sulla distribuzione.
  • Mettere la responsabilità sul veicolo. Il team è responsabile del codice in produzione; "L'IA l'ha fatto" non è una scusa.

In sintesi

L'accettazione dell'output dell'intelligenza artificiale richiede tre livelli di verifica: correttezza (compilazione, test, ispezione visiva), sicurezza (SAST e revisione incentrata sulla sicurezza) e origine/licenza (controllo delle dipendenze). Conferma che ogni pacchetto e API utilizzati esista effettivamente, applica modelli di sicurezza fin dall'inizio e invia il codice critico per la sicurezza per l'approvazione da parte di un tecnico qualificato. “Funziona” non significa sicuro e “prodotto dall’intelligenza artificiale” non elimina la responsabilità. Il cancello di verifica è il prezzo della professionalità, non della velocità.

Compito dell'applicazione

Assegnare deliberatamente a un’intelligenza artificiale un compito sensibile alla sicurezza (ad esempio “una funzione che effettua ricerche nel database con l’input dell’utente”), questa volta senza imporre uno schema sicuro. Passa il codice in entrata attraverso modelli di "autocontrollo pre-ammissione" e di "revisione incentrata sulla sicurezza": sono presenti iniezioni, segreti sepolti, pacchetti allucinati o input non autenticati? Quindi chiedi di nuovo la stessa attività con il modello “imposizione di pattern sicuri” e confronta i due risultati. Se possibile, eseguire uno strumento linter/SAST e confrontare i risultati con l'autoregolamentazione dell'IA.

lista di controllo

  • [] Verifico l'output dell'intelligenza artificiale su tre livelli: accuratezza, sicurezza e licenza.
  • [ ] Confermo che ogni funzione, API e pacchetto utilizzato esiste realmente.
  • [] Utilizzo strumenti di compilazione, test, linter e, se possibile, SAST.
  • [ ] Imposto modelli sicuri (query parametrizzata, convalida dell'input, gestione dei segreti) fin dall'inizio.
  • [] Controllo la licenza e i requisiti delle nuove dipendenze.
  • [ ] Sto sottoponendo un codice critico per la sicurezza all'approvazione di un tecnico competente e sono consapevole di esserne responsabile.