Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OWASP – 21.03.2012, Kraków              I WANT TO                BELIEVE                  IN           STATIC ANALYSIS    ...
# whoami?
DYSKUSJA ZAMIAST   WYKRESÓW!
A NA      Z Z    I   L C  A Y N TA TA S
THE GOOD
ANALIZA STATYCZNA● Metoda analizy statycznychobiektów mająca na celuwnioskowanie nt. ich własności● Możemy analizować kodź...
Po co?●   Żeby wykryć błędy w naszym kodzie (XSS,    buffer overflow, ...)●   Żeby wykryć niedoróbki w naszym kodzie    (d...
Narzędzia●   KlocWork (C/C++/Java)●   Fortify (Java...)●   Coverity (C/C++)●   FindBugs (Java)●   Splint (C)●   Clang (C)●...
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 je...
THE BAD
Statyczna analiza jest              skomplikowana●   Bardzo trudna w przypadku języków    statycznych (C, C++, JAVA...)●  ...
Problemy nierozstrzygalneJeżeli potrafimy wywnioskować coś nietrywialnego okodzie (np. obecność SQL injection), to potrafi...
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...
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!● ...
QUIZ - EASYvar_dump(0 == "php");var_dump(NULL == array());var_dump(array() == 0);
QUIZ - EASYvar_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 ...
var_dump(array() == ””)=F
RIPS
PIXYhttp://pixybox.seclab.tuwien.ac.at/pixy/
Q&A
OWASP - analiza statyczna języka PHP
Upcoming SlideShare
Loading in …5
×

OWASP - analiza statyczna języka PHP

735 views

Published on

Published in: Technology
  • Be the first to like this

OWASP - analiza statyczna języka PHP

  1. 1. OWASP – 21.03.2012, Kraków I WANT TO BELIEVE IN STATIC ANALYSIS Mateusz Kocielski m.kocielski@logicaltrust.net
  2. 2. # whoami?
  3. 3. DYSKUSJA ZAMIAST WYKRESÓW!
  4. 4. A NA Z Z I L C A Y N TA TA S
  5. 5. THE GOOD
  6. 6. ANALIZA STATYCZNA● Metoda analizy statycznychobiektów mająca na celuwnioskowanie nt. ich własności● Możemy analizować kodźródłowy, binaria, wszystko cosię nie rusza.
  7. 7. 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)
  8. 8. Narzędzia● KlocWork (C/C++/Java)● Fortify (Java...)● Coverity (C/C++)● FindBugs (Java)● Splint (C)● Clang (C)● RIPS (PHP)● PIXY (PHP)
  9. 9. Przykład
  10. 10. Co nas interesuje?● XSS● SQL injection● Code execution● CSRF● …● Jak wykrywa się powyższe błędy „automatami”?
  11. 11. Tendencyjny przykład! DEMO
  12. 12. 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ć?
  13. 13. THE BAD
  14. 14. Statyczna analiza jest skomplikowana● Bardzo trudna w przypadku języków statycznych (C, C++, JAVA...)● EKSTREMALNIE trudna w przypadku języków dynamicznych (PHP, Python)● Skąd bierze się trudność analizy? ● Jak wnioskować nt. kodu? ● Jak być pewnym wniosków? ● Czy false positives to duży kompromis?
  15. 15. Problemy nierozstrzygalneJeżeli potrafimy wywnioskować coś nietrywialnego okodzie (np. obecność SQL injection), to potrafimyrozwiązać problem stopu ! ALAN TURING
  16. 16. Co możemy zrobić?KOMPROMIS: Musimy się zgodzić na niedoskonałość analizy. Gdzie kończy się nasza cierpliwość?
  17. 17. 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ć ...
  18. 18. SOA#1
  19. 19. THE UGLY?
  20. 20. THE UGLY!
  21. 21. 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, ...)
  22. 22. QUIZ - EASYvar_dump(0 == "php");var_dump(NULL == array());var_dump(array() == 0);
  23. 23. QUIZ - EASYvar_dump(0 == "php") = Tvar_dump(NULL == array()) = Tvar_dump(array() == 0) = F
  24. 24. QUIZ - HARDCORE++var_dump(false == array());var_dump(false == ””);var_dump(array() == ””);
  25. 25. QUIZ – HARDCORE++ - PODPOWIEDŹvar_dump(false == array())=Tvar_dump(false == ””)=Tvar_dump(array() == ””)=?
  26. 26. QUIZ – HARDCORE++ - PODPOWIEDŹ (2)var_dump(false == array())=Tvar_dump(false == ””)=Tvar_dump(array() == ””)=?X = Y i Y = Z to X = Z
  27. 27. var_dump(array() == ””)=F
  28. 28. RIPS
  29. 29. PIXYhttp://pixybox.seclab.tuwien.ac.at/pixy/
  30. 30. Q&A

×