Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

Audit di sicurezza con AI

Audit di sicurezza con AI generativa 🤖🔒

Perché affidarsi all’AI per la sicurezza? 🧐

L’AI generativa non dorme mai, non si distrae e non si lamenta se le chiedi di rileggere per la decima volta lo stesso file. Ma può davvero sostituire l’occhio clinico di chi ha visto più bug che tramonti? Spoiler: no, ma può essere un alleato prezioso per scovare vulnerabilità, configurazioni insicure e pratiche da brividi.

Vantaggi:

  • Analisi rapida di grandi codebase
  • Individuazione di pattern rischiosi (anche quelli che pensavi di aver nascosto bene)
  • Suggerimenti pratici e spesso… spietati

Limiti:

  • Non capisce il contesto aziendale (ancora!)
  • Può segnalare falsi positivi (o ignorare il bug che ti farà perdere il sonno)
  • Non sostituisce la revisione umana, ma la rende più efficace

Come funziona un audit AI-driven? 🛠️

L’idea è semplice: fornisci all’AI un prompt ben strutturato, le dai in pasto il codice e aspetti che ti restituisca una lista di problemi (e qualche consiglio non richiesto). Il segreto? Scrivere un prompt chiaro, specifico e senza lasciare spazio a interpretazioni creative.

⚡️ Questo tipo di prompt offre i risultati migliori se utilizzato con agenti specializzati nell’analisi del codice, come GitHub Copilot, ChatGPT con plugin per il code review o strumenti simili.

Ecco un esempio di prompt che puoi usare per una code review di sicurezza:

 1Analizza il codice ed esegui una code review focalizzata sulla sicurezza.
 2
 3Identifica:
 4
 5- vulnerabilità 
 6- configurazioni insicure
 7- pratiche o pattern di programmazione insicuri
 8- chiamate a funzioni deprecate o pericolose
 9- credenziali hardcoded o informazioni sensibili
10- errori o eccezioni non gestite
11
12Per ogni problema rilevato riportando la sezione di codice coinvolta e fornisci:
13
14- una valutazione del rischio (Alta, Media, Bassa)
15- una descrizione chiara
16- un suggerimento pratico di mitigazione
17
18Esegui solo analisi sulla sicurezza, ignora refactoring generico o ottimizzazioni di performance, non aggiungere ulteriori considerazioni.
19
20Crea un file `AUDIT-{YYYYMMDD}.md` nella root del progetto.

Esempio di risultato audit:

 1# Security Audit Report
 2
 3## Vulnerabilità Identificate
 4
 5### 1. Permessi File Non Sicuri
 6
 7**Severità: ALTA**
 8
 9**Localizzazione**:
10
11- pkg/model/operations.go:
12
13```go
14err := os.Mkdir(newDirPath, os.ModePerm)  // 0777
15err := os.WriteFile(newFilePath, []byte{}, os.ModePerm)  // 0777
16```
17
18**Descrizione**: L'uso di `os.ModePerm` (0777) per la creazione di file e directory concede permessi completi a tutti gli utenti, esponendo potenzialmente dati sensibili.
19
20**Mitigazione**:
21
22- Utilizzare permessi più restrittivi come 0750 per directory e 0640 per file
23- Implementare una funzione che determini i permessi appropriati basandosi sul contesto e l'utente
24
25### 2. Command Injection Vulnerability
26
27**Severità: ALTA**
28
29**Localizzazione**:
30
31- pkg/model/model.go:
32
33```go
34cmd := exec.Command("code", path)
35cmd := exec.Command("open", path)
36cmd := exec.Command("xdg-open", path)
37```
38
39**Descrizione**: L'esecuzione di comandi con input non sanitizzato può portare a command injection se il path contiene caratteri speciali o sequenze maligne.
40
41**Mitigazione**:
42
43- Validare e sanitizzare i path prima dell'esecuzione
44- Utilizzare filepath.Clean() per normalizzare i path
45- Implementare una whitelist di caratteri permessi

Best practice per audit AI e sicurezza 🦾

  • Non fidarti ciecamente: l’AI può essere brillante, ma anche molto creativa…
  • Valida sempre i risultati: ogni segnalazione va verificata da un umano (meglio se caffeinato)
  • Integra l’AI nel processo: usala come primo filtro, poi passa la palla al team di sicurezza
  • Documenta tutto: salva i report, annota le decisioni e aggiorna la documentazione. Un giorno ti ringrazierai.

Limiti e rischi da non sottovalutare ⚠️

  • L’AI non conosce le policy interne né le eccezioni “storiche” del tuo progetto
  • Potrebbe suggerire soluzioni non compatibili con il tuo stack
  • Non sostituisce la formazione del team: la sicurezza è (ancora) una responsabilità umana

Conclusione 🎯

L’AI generativa è come un collega iperattivo: ti aiuta a trovare problemi che non sapevi di avere, ma ogni tanto va tenuta a bada. Usala per velocizzare l’audit di sicurezza, ma non delegare mai il giudizio finale. E ricorda: la miglior difesa resta sempre una buona dose di sano scetticismo (e qualche test in più).

Ultimo aggiornamento il