31
Mateusz Kocielski I WANT TO BELIEVE IN STATIC ANALYSIS [email protected] OWASP – 21.03.2012, Kraków

OWASP - analiza statyczna języka PHP

Embed Size (px)

Citation preview

Page 1: OWASP - analiza statyczna języka PHP

Mateusz Kocielski

I WANT TO BELIEVE

INSTATIC ANALYSIS

[email protected]

OWASP – 21.03.2012, Kraków

Page 2: OWASP - analiza statyczna języka PHP

# whoami?

Page 3: OWASP - analiza statyczna języka PHP
Page 4: OWASP - analiza statyczna języka PHP

DYSKUSJA ZAMIAST WYKRESÓW!

Page 5: OWASP - analiza statyczna języka PHP

ANALIZA

STAT

YCZNA

Page 6: OWASP - analiza statyczna języka PHP

THE GOOD

Page 7: OWASP - analiza statyczna języka PHP

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.

Page 8: OWASP - analiza statyczna języka PHP

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)

Page 9: OWASP - analiza statyczna języka PHP

Narzędzia

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

Page 10: OWASP - analiza statyczna języka PHP

Przykład

Page 11: OWASP - analiza statyczna języka PHP

Co nas interesuje?

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

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

Page 12: OWASP - analiza statyczna języka PHP

Tendencyjny przykład!

DEMO

Page 13: OWASP - analiza statyczna języka PHP

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ć?

Page 14: OWASP - analiza statyczna języka PHP

THE BAD

Page 15: OWASP - analiza statyczna języka PHP

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?

Page 16: OWASP - analiza statyczna języka PHP

Problemy nierozstrzygalne

ALAN TURING

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

Page 17: OWASP - analiza statyczna języka PHP

Co możemy zrobić?

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

Gdzie kończy się nasza cierpliwość?

Page 18: OWASP - analiza statyczna języka PHP

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ć...

Page 19: OWASP - analiza statyczna języka PHP

SOA#1

Page 20: OWASP - analiza statyczna języka PHP

THE UGLY?

Page 21: OWASP - analiza statyczna języka PHP

THE UGLY!

Page 22: OWASP - analiza statyczna języka PHP

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, ...)

Page 23: OWASP - analiza statyczna języka PHP

QUIZ - EASY

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

Page 24: OWASP - analiza statyczna języka PHP

QUIZ - EASY

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

Page 25: OWASP - analiza statyczna języka PHP

QUIZ - HARDCORE++

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

Page 26: OWASP - analiza statyczna języka PHP

QUIZ – HARDCORE++ - PODPOWIEDŹ

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

Page 27: OWASP - analiza statyczna języka PHP

QUIZ – HARDCORE++ - PODPOWIEDŹ (2)

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

X = Y i Y = Z to X = Z

Page 28: OWASP - analiza statyczna języka PHP

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

Page 29: OWASP - analiza statyczna języka PHP

RIPS

Page 30: OWASP - analiza statyczna języka PHP

PIXY

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

Page 31: OWASP - analiza statyczna języka PHP

Q&A