Reverse engineering: una precisazione
Citi strumenti come IDA Pro, Ghidra e ILSpy. Sono esempi pertinenti, ma è importante distinguere due concetti.
• Crittografia: protegge i dati e, in determinate architetture, il codice conservato o trasmesso. Non rende automaticamente sicuro un programma e non impedisce necessariamente di analizzare il codice mentre viene eseguito.
• Offuscamento: rende il codice più difficile da comprendere e analizzare, ma non impedisce in assoluto il reverse engineering.
Ghidra, sviluppato originariamente dalla NSA e poi reso open source, è un potente strumento di analisi e reverse engineering. ILSpy, invece, è particolarmente utile per analizzare gli assembly .NET e ricostruire una rappresentazione leggibile del codice C#.
La precisazione fondamentale è questa: l'offuscamento può aumentare il costo dell'analisi, ma non rappresenta una misura di sicurezza contro un programma malevolo. Anzi, anche il malware può essere offuscato per nascondere le proprie funzionalità.
4. Il vero problema è sapere cosa si sta eseguendo
Questo è, a mio avviso, il punto più forte del tuo intervento.
Non è realistico pretendere che ogni utente sappia analizzare un eseguibile con un disassemblatore o effettuare un audit completo del codice. Nemmeno un programmatore esperto può garantire la sicurezza assoluta di ogni software che utilizza.
È però ragionevole adottare alcune precauzioni:
• preferire programmi provenienti da fonti affidabili;
• verificare la reputazione dello sviluppatore e la provenienza dei file;
• controllare le dipendenze e le autorizzazioni richieste;
• eseguire scansioni antivirus e controlli di sicurezza, sapendo che non sono infallibili;
• utilizzare una macchina virtuale o un ambiente isolato quando il livello di fiducia è basso;
• esaminare il codice sorgente, quando disponibile, senza presumere che la sua pubblicazione ne garantisca la sicurezza.
La virtualizzazione riduce alcuni rischi, ma non offre una protezione assoluta: anche un ambiente isolato può essere configurato male o, in casi più rari, essere compromesso.
5. C'è un aspetto che aggiungerei al tuo discorso
Non attribuirei all'intelligenza artificiale una responsabilità particolare rispetto alla sicurezza del software.
Un programma scritto interamente da un essere umano può essere pericoloso; uno generato dall'IA può essere sicuro, e viceversa. La differenza la fanno il processo di sviluppo, le verifiche effettuate, le intenzioni di chi lo distribuisce e il livello di fiducia che possiamo ragionevolmente riporre nel software.
Il punto non è essere contrari all'IA, né scoraggiare chi si diverte a programmare. È evitare che la facilità con cui oggi si produce software faccia dimenticare la responsabilità di distribuirlo e installarlo.
Il mio giudizio sul tuo intervento
Lo condivido nella sostanza. Cambierei soltanto due aspetti del messaggio originale.
Il primo è l'affermazione secondo cui chi scarica un programma conosce il rischio che corre. Spesso non è così: molti utenti non hanno gli strumenti per valutare il rischio e si fidano perché vedono un programma funzionante, leggono commenti positivi o ricevono rassicurazioni dal suo autore.
Il secondo è il riferimento al reverse engineering come se la protezione del codice fosse necessariamente il principale problema di sicurezza. In realtà, per chi deve decidere se fidarsi di un programma, è molto più importante capire quali operazioni esegue, quali dati raccoglie, con quali server comunica e quali privilegi richiede che impedire a qualcuno di leggerne il codice.
E aggiungerei una distinzione: la possibilità di analizzare un programma non è soltanto una minaccia per chi lo sviluppa; è anche uno strumento essenziale per chi vuole verificarne il comportamento.
In definitiva, la tua preoccupazione è legittima: programmare è diventato più accessibile, ma la capacità di valutare il rischio non si è automaticamente diffusa allo stesso ritmo.
La domanda da porsi prima di installare un programma sconosciuto non dovrebbe essere soltanto «Funziona?», ma anche: «Mi fido abbastanza di chi lo ha realizzato da concedergli di funzionare sul mio computer?».
Ed è una domanda che vale per tutti, indipendentemente dal linguaggio utilizzato, dal fatto che il codice sia stato scritto da una persona o generato dall'intelligenza artificiale, e persino dal fatto che il programma sia gratuito.
Alcune considerazioni da ingenuo.
Il problema non è soltanto sapere se il programma che scarichiamo è sicuro, ma sapere se quello che eseguiamo è davvero il programma che il suo autore ha realizzato e distribuito.
Potrei calcolare l'impronta digitale del programma usando un algoritmo crittografico come SHA-256.
Anche una modifica minima del file produce, con probabilità estremamente elevata, un'impronta differente.
Con Powershell basta: Get-FileHash .\MioProgramma.exe -Algorithm SHA256
• Una firma valida non dimostra che il programma sia innocuo. Dimostra l'integrità del contenuto firmato e fornisce informazioni sull'identità associata alla firma.
• Devi proteggere la chiave privata usata per firmare. Se qualcuno la sottrae, potrebbe firmare programmi modificati fingendo di essere te.
Sembrerebbe la soluzione definitiva. Ma ahimé non lo è.
Utilizzare una macchina virtuale aiuta certamente. E se lo sapete fare, blindandola per quanto possibile, usatela.
Poi se la paura vi frena non usate computer, telefonino, Tv Smart e via elencando.