OWASP - analiza statyczna języka PHP

Preview:

Citation preview

Mateusz Kocielski

I WANT TO BELIEVE

INSTATIC ANALYSIS

m.kocielski@logicaltrust.net

OWASP – 21.03.2012, Kraków

# whoami?

DYSKUSJA ZAMIAST WYKRESÓW!

ANALIZA

STAT

YCZNA

THE GOOD

ANALIZA STATYCZNA

● Metoda analizy statycznych obiektów mająca na celu wnioskowanie nt. ich własności● Możemy analizować kod źródłowy, binaria, wszystko co się nie rusza.

Po co?

● Żeby wykryć błędy w naszym kodzie (XSS, buffer overflow, ...)

● Żeby wykryć niedoróbki w naszym kodzie (dead code, redundancja, …)

● Żeby poprawić jakość projektu (patrz wyżej)

● Żeby uzyskać metryki (np. złożoność kodu)

Narzędzia

● KlocWork (C/C++/Java)● Fortify (Java...)● Coverity (C/C++)● FindBugs (Java)● Splint (C)● Clang (C)● RIPS (PHP)● PIXY (PHP)

Przykład

Co nas interesuje?

● XSS● SQL injection● Code execution● CSRF● …

● Jak wykrywa się powyższe błędy „automatami”?

Tendencyjny przykład!

DEMO

Jak używać?

● Integracja ze środowiskiem developerskim● Wspomagając proces przeglądu kodu● Na koniec projektu (czy jesteśmy skazani wtedy na

porażkę?)● Jakich wyników powinniśmy się spodziewać?

THE BAD

Statyczna analiza jest skomplikowana

● Bardzo trudna w przypadku języków statycznych (C, C++, JAVA...)

● EKSTREMALNIE trudna w przypadku EKSTREMALNIE trudna w przypadku języków dynamicznych (PHP, języków dynamicznych (PHP, Python)Python)

● Skąd bierze się trudność analizy?● Jak wnioskować nt. kodu?● Jak być pewnym wniosków?● Czy false positives to duży kompromis?

Problemy nierozstrzygalne

ALAN TURING

Jeżeli potrafimy wywnioskować coś nietrywialnego o kodzie (np. obecność SQL injection), to potrafimy rozwiązać problem stopu!

Co możemy zrobić?

KOMPROMIS: Musimy się zgodzić na niedoskonałość analizy.

Gdzie kończy się nasza cierpliwość?

WTF? - false positives!

● Możemy dostrajać naszą analizę(np. klocwork, splint, …)● czułość, zakres, …

● Możemy o niej myśleć programując● ograniczanie się do podzbiorów języka● dekorowanie kodu

● Możemy przestać z niej korzystać... albo...● Możemy nauczyć się z nią żyć...

SOA#1

THE UGLY?

THE UGLY!

PHP● Czy jest na sali ktoś, kto nie słyszał o PHP?● Bardzo popularny, dynamiczny język o

dziwnych właściwościach!● Korzystają z niego giganci (NK, facebook, ...)

QUIZ - EASY

var_dump(0 == "php");var_dump(NULL == array());var_dump(array() == 0);

QUIZ - EASY

var_dump(0 == "php") = Tvar_dump(NULL == array()) = Tvar_dump(array() == 0) = F

QUIZ - HARDCORE++

var_dump(false == array());var_dump(false == ””);var_dump(array() == ””);

QUIZ – HARDCORE++ - PODPOWIEDŹ

var_dump(false == array())=Tvar_dump(false == ””)=Tvar_dump(array() == ””)=?

QUIZ – HARDCORE++ - PODPOWIEDŹ (2)

var_dump(false == array())=Tvar_dump(false == ””)=Tvar_dump(array() == ””)=?

X = Y i Y = Z to X = Z

var_dump(array() == ””)=F

RIPS

PIXY

http://pixybox.seclab.tuwien.ac.at/pixy/

Q&A

Recommended