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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
Analizza il codice ed esegui una code review focalizzata sulla sicurezza.

Identifica:

- vulnerabilità 
- configurazioni insicure
- pratiche o pattern di programmazione insicuri
- chiamate a funzioni deprecate o pericolose
- credenziali hardcoded o informazioni sensibili
- errori o eccezioni non gestite

Per ogni problema rilevato riportando la sezione di codice coinvolta e fornisci:

- una valutazione del rischio (Alta, Media, Bassa)
- una descrizione chiara
- un suggerimento pratico di mitigazione

Esegui solo analisi sulla sicurezza, ignora refactoring generico o ottimizzazioni di performance, non aggiungere ulteriori considerazioni.

Crea un file `AUDIT-{YYYYMMDD}.md` nella root del progetto.

Esempio di risultato audit:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Security Audit Report

## Vulnerabilità Identificate

### 1. Permessi File Non Sicuri

**Severità: ALTA**

**Localizzazione**:

- pkg/model/operations.go:

```go
err := os.Mkdir(newDirPath, os.ModePerm)  // 0777
err := os.WriteFile(newFilePath, []byte{}, os.ModePerm)  // 0777
```

**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.

**Mitigazione**:

- Utilizzare permessi più restrittivi come 0750 per directory e 0640 per file
- Implementare una funzione che determini i permessi appropriati basandosi sul contesto e l'utente

### 2. Command Injection Vulnerability

**Severità: ALTA**

**Localizzazione**:

- pkg/model/model.go:

```go
cmd := exec.Command("code", path)
cmd := exec.Command("open", path)
cmd := exec.Command("xdg-open", path)
```

**Descrizione**: L'esecuzione di comandi con input non sanitizzato può portare a command injection se il path contiene caratteri speciali o sequenze maligne.

**Mitigazione**:

- Validare e sanitizzare i path prima dell'esecuzione
- Utilizzare filepath.Clean() per normalizzare i path
- 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