User Tools

Site Tools


secure-low-level-programming:capitole:09-utilitare-de-analiza-cod

This is an old revision of the document!


9. Utilitare de analiză de cod

Pentru a preveni existența bug-urilor și a vulnerabilităților, un dezvoltator va urmări cu atenție codul scris de sine sau de alții (auditare de cod). Pentru a facilita acest proces, există utilitare specifice care să automatizeze analiza codului și să raporteze posibile probleme. Pot fi utilitare de analiză statică (pe cod) sau de analiză dinamică (ce presupun rularea unui proces). Este important integrarea acestor utilitare în procesul de dezvoltare și testare software (Software Development Lifecycle).

Subiecte abordate

  • auditarea codului
  • utilitare de analiză statică
  • utilitare de analiză dinamică
  • fuzzing
  • execuție simbolică

Resurse

Alte resurse

Exerciții

Arhiva de suport pentru exerciții se găsește aici. Descărcați arhiva și apoi decomprimați-o folosind comenzile:

wget http://koala.cs.pub.ro/training/res/secure-low-level-programming/arc/09-utilitare-de-analiza-cod-skel.zip
unzip 09-utilitare-de-analiza-cod-skel.zip
cd 09-utilitare-de-analiza-cod-skel/

Pentru a instala aplicațiile necesare pentru investigarea programelor folosiți comanda

sudo apt install clang cppcheck splint valgrind

Auditare cod

Accesăm directorul hidden-bugs/ din arhiva de suport.

Fișierul cod sursă hidden-bugs.c conține 8 erori de programare. Identificați-le parcurgând manual codul (code audit). Lucrați în echipe de 2-3 persoane.

După aceasta folosiți utilitarele cppcheck, splint și scan-build pentru a verifica static prezența erorilor.

Moduri uzuale de rulare:

cppcheck --enable=all hidden-bugs.c
splint hidden-bugs.c
scan-build make

Foarte probabil veți vedea că utilitarele nu depistează multe erori. Multe erori nu pot fi depistate cu utilitare de analiză, ci mai degrabă de un observator uman.

Verificare cod anterior

Folosiți utilitarele cppcheck, scan-build și splint pentru a verifica fișierele ce conțin buffer overflow-uri din sesiunea 06.

Verificare cod proiect

Accesăm directorul picpic/ din arhiva de suport.

Verificați codul sursă din cadrul directorului folosind utilitarele cppcheck, splint și scan-build.

Pentru a rula cppcheck și să țină cont de bibliotecile de sistem, folosiți comanda

cppcheck --enable=all -I /usr/include/ -I /usr/include/linux/ -I /usr/lib/gcc/x86_64-linux-gnu/5/include/ --check-config main.c

Înlocuiți main.c cu numele fișierului pe care doriți să-l investigați.

Valgrind

Accesăm directorul valgrind/ din arhiva de suport.

Urmăriți codul din fișierul cod sursă vuln.c și rulați executabilul vuln. Executabilul primește ca argument un număr care se asociează cu o anumită funcție din program ce va fi executată. Rulați programul sub Valgrind în forma:

valgrind ./vuln 1

Vedeți rezultatul afișat de Valgrind și validați depistarea erorilor de folosire a memoriei.

Fuzzing

Clonați repository-ul de aici folosind comanda

git clone https://github.com/ThalesIgnite/afl-training

Apoi urmăriți indicațiile de aici pentru a face fuzzing pe executabilul vulnerable.

Compilarea fuzzer-ului AFL va dura.

Symbolic Execution

Urmăriți indicațiile de aici pentru instalarea Angr.

Clonați repository-ul de exemple Angr de aici folosind coamnda

git clone https://github.com/angr/angr-doc

Testați exemplul din examples/strcpy_find din repository-ul clonat, exemplu descris și aici.

secure-low-level-programming/capitole/09-utilitare-de-analiza-cod.1545320009.txt.gz · Last modified: 2018/12/20 17:33 by razvan