owasp - analiza statyczna języka php
TRANSCRIPT
# 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