Esaminando il codice sorgente per le vulnerabilità di sicurezza e di sicurezza

5

Quali sono alcune tecniche per determinare se una particolare parte del codice sorgente è dannosa o vulnerabile a un attacco dannoso? Attualmente sto usando cppcheck e sto aspettando un'installazione di Rational AppSource. A prescindere da quello e rivedere le linee guida di codifica sicura US-CERT, che altro dovrei guardare? Questo è per un codebase molto grande (150K SLOC).

    
posta Brian 02.06.2011 - 22:19
fonte

3 risposte

3

Non penso che ci sia uno strumento, o lo sarà mai, in grado di fornire certezza. Non si specifica se si sta cercando codice accidentale o intenzionalmente dannoso. Gli errori accidentali sono più facili da individuare, le "backdoor" intenzionali sono impossibili, a livello di strumenti, da distinguere dal codice valido.

Vorrei iniziare con (come hai già detto) i controlli statici e i controlli dinamici (valgrind).

Sarà richiesto un riesame interno del codice / audit e, in base all'importanza e ai budget del progetto, la revisione del codice esterno / audit da parte di specialisti sarebbe denaro ben speso. 150kLOC è un progetto di dimensioni abbastanza medie, dovrebbe essere possibile eseguire un controllo di questo.

Il test delle interfacce (blackbox) è essenziale. Utilizzare un consulente di sicurezza se non si dispone di esperti interni.

Se stai cercando codice intenzionale, è un grosso problema, dato che è piuttosto facile nascondere vulnerabilità intenzionali (ad es. un overflow del buffer intenzionale nascosto dietro il cast per nascondere l'avviso del compilatore), ed è una base di codice troppo grande per essere certo di identificarne tutti. Supponi di non trovarli tutti e di distribuirli di conseguenza.

    
risposta data 02.06.2011 - 23:46
fonte
3

Ci sono concorsi periodici per codice e codice offuscati che fanno qualcosa di diverso da ciò che sembra fare. Studia le voci del concorso e scoprirai che questo non è un problema da risolvere.

    
risposta data 02.06.2011 - 23:51
fonte
2

What are some techniques in determining if a particular piece of source code is malicious or vulnerable to malicious attack?

Ci sono due parti qui nella domanda. Se stai cercando codice intenzionalmente dannoso, dovrai ricorrere a revisioni manuali del codice sorgente da parte degli esaminatori competenti. Non tutti i revisori sarebbero a conoscenza di quale sia il codice dannoso, ma la maggior parte dei revisori (in particolare quelli che hanno definito i requisiti per i componenti / moduli) saprebbe se un codice obbedisce o meno ai requisiti sottostanti.

Se si cerca codice suscettibile di attacchi dannosi, sarà utile sia la revisione manuale che quella automatizzata del codice sorgente. Avendo lavorato con Fortify SCA in passato, posso solo ripetere questo consiglio: eseguire un'analisi manuale dell'applicazione per determinare cosa è necessario cercare e utilizzare gli strumenti per ridimensionare la scansione di sicurezza.

    
risposta data 03.06.2011 - 05:40
fonte

Leggi altre domande sui tag