A) Is there an advantage/disadvantage of conducting reviews of
binaries over source-code?
Spesso i compilatori NON scrivono espressamente il codice come previsto nella fonte. Ad esempio, Return Oriented Programming sfrutta il fatto che i compilatori inseriranno molti più opcode RET
di quanti ne sappia il programmatore. A causa del pipelining e altri trucchi di ottimizzazione, i compilatori essenzialmente riscrivono il tuo codice e possono possibilmente aggiungere le proprie vulnerabilità. Ciò significa che alcuni costrutti nel codice sorgente potrebbero non essere espressi nel file binario!
Questa è una classe di errore che è essenzialmente impossibile per catturare l'analisi manuale del codice ... e sospetto che il rischio sarebbe ancora lì per il codice JIT Java / C #, ma questo sarebbe essere offuscato da uno strumento di analisi statica.
L'analisi manuale del codice sorgente può essere d'aiuto dal fatto che le maggior vulnerabilità comuni possono essere catturate dall'ispezione visiva. E ha anche altri vantaggi, in particolare diminuendo il numero di cimici dei prodotti in generale. (E quindi costa). E aiuta anche l'aspetto sociale: le recensioni delle fonti incoraggiano le persone a scrivere come se qualcun altro stesse guardando. Uno svantaggio principale è che se si ha a che fare con un linguaggio tipizzato dinamicamente, come PERL, Groovy, LISP e le sue derivate ... la maggior parte dei dati non verrà esaminata fino al runtime che significa nessuno statico l'analisi o l'analisi del codice sorgente è sufficiente.
Puoi persino ingannare gli strumenti di analisi statici convertendo il codice tipizzato staticamente in istruzioni in fase di esecuzione. A Veracode non piace il tuo costrutto java? Riscrivilo usando il riflesso e l'errore di Veracode scompare e nessuno è più saggio. Come esperto di sicurezza devi anche assumere che i programmatori che lavorano nella tua azienda sono una potenziale minaccia.
Quindi, in breve, non c'è modo di evitare l'analisi del codice sorgente, l'analisi statica e l'analisi dinamica in qualsiasi applicazione specifica se la tua speranza è una base di codice accettabilmente sicura. *
B) Which one provides more coverage/vulnerabilities.
L'analisi del codice sorgente dipende dai revisori che hanno eccellenti capacità di sicurezza e dal momento che sono esseri umani, non si può ragionevolmente aspettarsi prestazioni perfette. Ecco perché gli strumenti di analisi statica sono utili. La mia preferenza è di eseguire prima gli strumenti di analisi statica e poi eseguire le revisioni di codice protette dopo le scoperte vengono mitigate, preferisco usare STRIDE ma ci sono altri framework da considerare. Ciò consente agli esseri umani di concentrarsi sui problemi di sicurezza meno banali che sono più legati alla logica. Ma un uomo intelligente batterà uno stupido strumento di analisi statica in qualsiasi giorno della settimana.
L'analisi del codice sorgente può aiutarti a scoprire dove un programmatore ha lasciato una back door ... gli strumenti di analisi statici non sono in grado di gestirlo.
Quindi la risposta a questa domanda è ... "dipende". Che tipo di minacce vuoi passare deselezionata?
* A meno che non sia definito "accettabilmente sicuro" lasciando aperte le finestre e sbloccata la porta anteriore.