SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Webműves Kelemen tanácsai,
 avagy mi kell a PHP falába?
       Buherátor,
       Buherátor, BuheraBlog
Bevezető
•   “0% ****, 100% tapasztalat” ☺
    • …és néhány technikai finomság
•   A webalkalmazások a vállalati infrastruktúra tipikus
    gyenge pontjai
    • Egyedi alkalmazás
    • Nem nyúlunk hozzá, ameddig mű   működik
•   A PHP remek állatorvosi ló
    • Jól ismert, jól olvasható, egyszerű
    • Hírhedten bugos kódok (vagy csak rossz PR?)
PHP – Miért szeretjük?
 Könnyen tanulható, gyorsan fejleszthető
    C-like syntax
    Dynamic Typing
 A Webre szánták
 Könnyen telepíthető
    Felmásolom, megy
           ű
    Könnyű konfiguráció, akár futásidőben
                              futásidő
 Jó platform támogatottság
 Jó dokumentáció, széles felhasználói bázis
 OOP (>=PHP5)
 GPL licensz
PHP – Miért nem szeretjük
 Lásd az előző diát :)
 Kóder Pisti kedvenc nyelve
 Beépített függvény-vízfej
           függvény-
   Következetlen elnevezések, függvény-szignatúrák
                              függvény-
    − strlen(), str_split()
   A bőség zavara
    − mysql_escape_string(),
      mysql_real_escape_string(), addslashes() …
   Biztonság...?
 Y U No Unicode?
Lehet jól is csinálni
PHP biztonság - óvoda

 A webszerver korlátozott jogokkal fut, ugye?
 A register_globals ki van kapcsolva, ugye?
 URL-
 URL-eket nem lehet megnyitni, ugye?
                    megnyitni, ugye?
 A felhasználók nem látják a hibaüzeneteket, ugye?
A PHP-s típushiba
  PHP-

•   File Include hibák
    •   Azonnali kódfuttatás
    •   Helyi forrásból
    •   Távoli forrásból
    •   Egy kis emlékeztető…
Local File Include
•   <?include(“files/”.$_GET[‘inc’]);?>
•   Mit futtathatunk?
        futtathatunk?
    •   Alkalmazáson keresztül feltöltött fájlok
        •   Ideiglenes fájlok
    •   Naplófájlok (pl. PHP kód a User Agentben)
                                        Agentben)
    •   Az alkalmazás saját fájljait rossz helyen include-
                                                  include-
        olva igen hasznos hibaüzenetek kaphatóak
Remote File Include
•   <?include($_GET[‘inc’].”.php”);?>
•   allow_url_fopen=True
•   Mit futtathatunk?
    •   Távoli webkiszolgálón elhelyezett tetsző
                                          tetszőleges
        kódot!
    •   Legtöbbször egyben LFI is…
Basedir restriction
                 ő
 Minden fájlkezelő funkcióban ellenő
                              ellenőrizni kellene a beállítást
   És minden felhasznált C könyvtárban is…
 5.2.9, 5.2.12, 5.3.0, 5.3.1 … mind megkerülhető
 MOPB: „not simple safe_mode, open_basedir bypass
 vulnerabilities”
 Tudta-
 Tudta-e Ön, hogy 5.2.16 ill. 5.3.4 előtt az itt megadott értékek,
                                    elő
 csak prefixek, nem konkrét könyvtárak voltak?
   /home/b => /home/b/ , /home/bizalmas/
Safe Mode
 Egy próbálkozás a veszélyes függvények letiltására /
 korlátozására
 Minden érintett funkcióban ellenő
                            ellenőrizni kellene a beállítást
 Az eredmény: hamis biztonságérzet
 „safe mode is an attempt to solve the shared-server security problem. It is
                                           shared-
 architecturally incorrect to try to solve this problem at the PHP level, but
 since the alternatives at the web server and OS levels aren't very realistic,
 many people, especially ISP's, use safe mode for now”

 „This is a still probably incomplete and possibly incorrect listing of the
 functions limited by safe mode. ”

 5.3.0 óta deprecated, 6-ban nincs
                       6-
Veszélyes függvények



        Melyek ezek?
Veszélyes függvények -
Parancsfuttatás
 passthru                     apache_child_terminate
 exec                         chown
                              chgrp
 pnctl_exec                   link
 proc_open                    symlink
 popen                        posix_kill
 system                       posix_mkfifo
 shell_exec                   posix_setpgid
                              posix_setsid
 register_shutdown_function   posix_setuid
 register_tick_function       proc_close
 dl                           proc_get_status
 eval                         proc_nice
 preg_replace [!]             proc_terminate
                              Putenv
 ...                          Touch
                              ...
Veszélyes függvények –
Hálózat
 ftp_connect
 ftp_ssl_connect
 fsockopen
 pfsockopen
 socket_bind
 socket_connect
 socket_listen
 socket_create_listen
 socket_accept
 socket_getpeername
 socket_send
 ...
Veszélyes függvények
 A listának még koránt sincs vége
    A modulok nagy részét még nem is láttuk!

                     ő ő űjtemény:
    Folyamatosan bővülő gyűjtemény:
    https://github.com/v-
    https://github.com/v-p-b/DangerousPHPFunctions

 Erre írjon valaki IDS szabályt, logelemző stb.!
                                 logelemzőt,
 Az eval()-t le sem lehet tiltani
    eval()-
 A disable_functions legalább jól kezelhető
 Szintén hasznos INI paraméterek:
 extension_dir, enable_dl
Fájl felöltés

 Kedvencünk, tipikus gyenge pont
 Sok helyen előfordul
 Legalább 80% sebezhető
 Legtöbb esetben azonnal kódot futtathatunk
                    őségek
 Alattomos hibalehetőségek
Fájl feltöltés -
Ökölszabályok
                 űrés
 Fehérlistás szűrés kiterjesztésekre
   De: Egy JPG-t is lehet futtatni include() hibával!
             JPG-
 Nevezzük át a feltöltött fájlt!
   A fájlnév is tartalmazhat shell, PHP utasításokat!
   Ha JPG-re számítunk, legyen ez az új kiterjesztés!
       JPG-
 Ha nem muszáj, ne a webroot alá töltsünk fel!
   Egy diszpécser szkript jogosultságot ellenő
                                          ellenőrizhet, MIME
   típust állíthat stb.
 A képeket transzformáljuk!
 A dupla kiterjesztéseket kerüljük!
Fájlfeltöltés – Az Apache
trükk
                 űrünk
 Fehérlistával szűrünk kiterjesztéseket
   $allowed=array(„.avi”,”.mov”,”.qt”);

   if (inarray(strrchr($name,'.'),$allowed)) return ACCEPT;

 Feltöltök egy shell.php.qt nevű fájlt
 A kiterjesztés megfelelő
 Az Apache viszont nem ismeri a .qt kiterjesztést, ezért
 a következőt veszi figyelembe kiszolgáláskor!
           őt
 Van egy PHP shellünk...
Fájlfeltöltés – IIS-en
                IIS-
ugyanez

 <= IIS 6
 evil.asp;.jpg vagy evil.asp:.jpg
 A ; ill. : utáni részeket a kiszolgáló nem veszi
 figyelembe
Fájlfeltöltés - Formátumellenő
                Formátumellenőrzés
Fájlfeltöltés - Formátumellenő
                Formátumellenőrzés
Képek átméretezése

•   image_resize.php?width=100&height=100
    image_resize.php?width=100&height=100
    •   “Öröm, bódottá”
         Öröm, bódottá”
•   image_resize.php?width=10000&height=10000
    image_resize.php?width=10000&height=10000
    •   DoS,
        DoS, nemöröm
•   Nem csak a webes hibákra kell figyelni!
                                  figyelni!
    •   “A támadások soha nem lesznek rosszabbak”
                                      rosszabbak”
Fájlfeltöltés - RFC1867

 Gynvael Coldwind, 2011
            ő,
 Nem jellemző, de nagyon szép :)
 Feltételezzük, hogy már van egy helyi include hiba
   Linuxon általában ez sem elég
 Nagyrészt Windows lehető
                   lehetőség
Fájlfeltöltés - RFC1867
Fájlfeltöltés - RFC1867
Fájlfeltöltés - RFC1867
 A feltöltött fájlok véletlenszerű nevet kapnak
 ellenőrzés előtt
   A könyvtár általában default
   Windowson 16-bit véletlen – nem túl sok
             16-
 De a Windows értelmezi a wildcardokat !(!!1)
                                       !(!!1
           őleges
   << Tetszőleges karakterlánc
   < Tetszőleges karakter
      ő
   Első egyezés kiválasztása
Adatbázis elérés

•   Az SQL injection rossz, értem?
                     rossz, értem?
    •   Ugye mindenki tudja mi az az SQL injection…?
•   MySQL-
    MySQL-hez van remek escape függvény!
                               függvény!
    •   mysql_escape_string()
        mysql_escape_string()
•   Azaz mégsem olyan jó…
                      jó…
Adatbázis elérés – SQL
Smuggling
•   A DBMS okosan az érvényes locale szerint próbálja
    átalakítani a spéci karaktereket
    • Á -> A, Í->I, Ű->U …
              Í - Ű-
•   A mysql_escape_string() nem veszi figyelembe az
    adatbázis locale-t
                locale-
•   Az PHP escape és a DBMS konverzió után újra
    injectionre alkalmas karakterlánc állhat elő
    • http://wechall.net/challenge/addslashes/index.php
    •   őben
      Élőben még nem láttam ilyet, de …
Adatbázis elérés


 Ugye senki sem karakterláncként pakolja össze a
                  lekérdezéseit?
Adatbázis elérés -
    Prepared statements
•   Hatékony!
    Hatékony!
    • Feldolgozás, fordítás, tervezés, stb.
      Feldolgozás, fordítás, tervezés, stb. csak egyszer!
                                                 egyszer!
•   Biztonságos!
    Biztonságos!
    • Adat és SQL elválasztva
    • Típusegyeztetés
•   PHP-
    PHP-ban tipikusan valamilyen absztrakciós rétegen
    keresztül
    • PDO
    • ODBC
    • …
Adatbázis elérés - ORM
•   Object Relational Mapping
    • DB entitás -> Objektum
•   A legtöbb keretrendszer tudja
•   Szintén biztonságos
    • Ha a keretrendszerben nem szúrtak el valamit…
                                           valamit…
•   Nagyon kényelmes
    • PHP és SQL elválasztva
•   Sokszor nem hatékony
•   Nem minden queryt lehet megfogalmazni
Adatbázis elérés - ORM
•   A “fogalmazási” problémákat sokszor a subquery-k
                                          subquery-
    okozzák
    •   JOIN-
        JOIN-olj okosan, subquery-k általában
                         subquery-
        feleslegesek!
•   Használjunk VIEW-kat!
                VIEW-
•   Használjunk tárolt eljárásokat!
    •   Melyekben figyelünk az SQL injectionre :P
Süti attributumok - HttpOnly
•   Tankönyvi XSS példa:
    <script>alert(document.cookie)</script>
•   HttpOnly: Kliens oldali szkriptek nem férhetnek hozzá
    a sütihez!
•          ő
    Böngésző feature, nem biztos, hogy mindenhol
    implementálták!
•      ől
    Ettől a XSS még veszélyes marad!
    •   Teljes kontroll a felhasználó jogosultságaival!
Süti attributumok - HttpOnly
•   PHP-
    PHP-ban alapértelmezetten nincs beállítva a flag a
    session-
    session-ökre
•   php.ini: session.cookie_httponly=On
    •   PHP 5.2.0-től
            5.2.0-
•   session_set_cookie_params()
•   Más sütiknél: setcookie() utolsó paramétere
Süti attributumok - Secure
•   Kapkodjuk el a hálózaton röpködő sütiket, és
    jelentkezzünk be velük
    • https://github.com/asciimoo/whol
    • Firesheep (esélyes Most Overhyped Extension)
•   Bár a kommunikáció HTTPS-en zajlik,
                          HTTPS-
                    ő
    kikényszeríthető a süti titkosítatlan küldése
    • <img src=“http://bank.com/logo.png”/>
            src=“http://bank.com/logo.png”/>
•   Secure: A süti csak titkosított csatornán továbbítható!
•             ő
    Böngésző feature, nem biztos, hogy mindenhol
    implementálták!
Süti attributumok - Secure
•   PHP-
    PHP-ban alapértelmezetten nincs beállítva a flag a
    session-
    session-ökre
•   php.ini: session.cookie_secure=On
    •   PHP 4.0.4-től
            4.0.4-
•   session_set_cookie_params()
•   Más sütiknél: setcookie() utolsó elő paramétere
                                     előtti
CSRF
•   Az XSS meg az SQLi lejárt lemez
    •   Mindenki ismeri
    •   Mindenhol működik…
•   A Cross-Site Request Forgery is lejárt lemez, de alig
      Cross-
    ismerik
•   “Miért kellene nekem ilyesmivel foglalkoznom?”
    •   Jogos kérdés!
CSRF

•   Autentikáció általában sütikkel
•            ő
    A böngésző egy sütitárat használ
•   A felhasználó több lapon böngészik
•   Ha egy idegen oldalon elhelyezett form küld adatot
    egy másik oldalra, ahová a felhasználó be van
                          ő
    jelentkezve, a böngésző automatikusan küldi az
    érvényes sütit
CSRF
CSRF
•   Használjunk véletlen adatokat tartalmazó mező
                                             mezőket
    minden formon
    •   Ez a token…
    •   ennek a felhasználónak…
    •   erre az űrlapra lett kiadva
•   Referer validáció
    •   Az áldozat nem fogja meghamisítani a saját
        Referer-
        Referer-ét
    •   Ha titkosítatlan a csatorna, akkor már úgyis
        mindegy
Védelem - WAF

•   Web Application Firewall
    •   Layer7
•   Komoly helyen alapkellék
•   Kiddie-
    Kiddie-k és tömeges, automatizált támadások ellen
    kiváló
•   Aki át akar menni rajta, az elő -utóbb át fog menni.
                                előbb
                                előbb-
Védelem - PHPIDS

•   include()-
    include()-dal behúzható PHP könyvtár
    •                    ő
        Modulként elérhező több CMS-hez
                                CMS-
•   Impresszív szabálykészlet
•   Jól karbantartott
•   De hol használják?
Védelem - Suhosin
•   Patch
    • BoF védelem
    • Format String védelem
    • Láncolt listák, hash-táblák védelme
               listák, hash-
    • FreeBSD realpath()
                  realpath()
    • …
•   Extension
    • Megregulázott preg_replace()
                        preg_replace()
    • Titkosított sütik
    • Végtelen rekurziók megállítása
    • …
•   És még rengeteg hasznos funkció
Védelem – Kód review
•   Költséghatékony,
    Költséghatékony, testreszabható megoldás: grep
                                    megoldás:
•   grep ‘mysql_query’
          mysql_query’
•   grep ‘SELECT’
•   grep ‘$_GET’
•   grep ‘eval(’
          eval(’
•   grep ‘print_r(’
          print_r(’
•   Csak a fantázia szab határt! ☺
                         határt!
Emlékeztető
•   Webalkalmazás nem létezik önállóan
    • HTTP szerver
    • Böngésző
    • DBMS
    • Távoli szolgáltatások
    • ???
•                  őnek
    Egy jó fejlesztőnek ismernie kell az általa fejlesztett
    alkalmazás környezetét is!
•   A webes támadások általában nem technológia-specifikusak
                                         technológia-
Köszönöm a figyelmet!
           figyelmet!
Linkek
•   http://www.owasp.org
•   http://www.hardened-
    http://www.hardened-php.net/
•   http://www.exploit-
    http://www.exploit-db.com/download_pdf/17010
•   http://www.exploit-
    http://www.exploit-db.com/download_pdf/15955
•   http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-
    http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-
    escape-
    escape-string
•   http://blog.mindedsecurity.com/2009/05/http-parameter-
    http://blog.mindedsecurity.com/2009/05/http-parameter-
    pollution-new-web-
    pollution-new-web-attack.html
•   http://blog.mindedsecurity.com/2009/05/client-side-http-
    http://blog.mindedsecurity.com/2009/05/client-side-http-
    parameter-
    parameter-pollution.html
•   http://resources.infosecinstitute.com/finding-bugs-in-php-
    http://resources.infosecinstitute.com/finding-bugs-in-php-
    using-
    using-grep/
•   http://buhera.blog.hu ;)

Más contenido relacionado

Destacado

Google io2011報告
Google io2011報告Google io2011報告
Google io2011報告cat kaotaro
 
Pollution ppt-090720025050-phpapp02
Pollution ppt-090720025050-phpapp02Pollution ppt-090720025050-phpapp02
Pollution ppt-090720025050-phpapp02younisnas
 
Finaldelivering bigsociety
Finaldelivering bigsocietyFinaldelivering bigsociety
Finaldelivering bigsocietyruralfringe
 
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...yrewol
 
BCG Online- Hvordan Internettet forvandler den danske økonomi
BCG Online- Hvordan Internettet forvandler den danske økonomiBCG Online- Hvordan Internettet forvandler den danske økonomi
BCG Online- Hvordan Internettet forvandler den danske økonomiFrontPage Google
 
Presentation smacad
Presentation smacadPresentation smacad
Presentation smacadElin Amberg
 
SA Youth Sex Survey 2011 - by Young Africa Live
SA Youth Sex Survey 2011 - by Young Africa LiveSA Youth Sex Survey 2011 - by Young Africa Live
SA Youth Sex Survey 2011 - by Young Africa LivePraekelt Foundation
 
Tripwire march april 2011 v2
Tripwire march april 2011 v2Tripwire march april 2011 v2
Tripwire march april 2011 v2ruralfringe
 
3改善地層下陷
3改善地層下陷3改善地層下陷
3改善地層下陷twnewone1
 
Storyboard haastattelu 1
Storyboard haastattelu 1Storyboard haastattelu 1
Storyboard haastattelu 1Marjo Jussila
 
Ode à Natureza
Ode à NaturezaOde à Natureza
Ode à Natureza110262
 
Hobuse unenaod
Hobuse unenaodHobuse unenaod
Hobuse unenaodeberlein
 
Globant Talent Scouting Center
Globant Talent Scouting CenterGlobant Talent Scouting Center
Globant Talent Scouting CenterGlobant
 
Crunch and sip!!
Crunch and sip!!Crunch and sip!!
Crunch and sip!!y3ehps
 

Destacado (20)

Google io2011報告
Google io2011報告Google io2011報告
Google io2011報告
 
Pollution ppt-090720025050-phpapp02
Pollution ppt-090720025050-phpapp02Pollution ppt-090720025050-phpapp02
Pollution ppt-090720025050-phpapp02
 
Finaldelivering bigsociety
Finaldelivering bigsocietyFinaldelivering bigsociety
Finaldelivering bigsociety
 
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...
James Lowery, Latitude Client Summit 2013: How to Make Friends and Influence ...
 
BCG Online- Hvordan Internettet forvandler den danske økonomi
BCG Online- Hvordan Internettet forvandler den danske økonomiBCG Online- Hvordan Internettet forvandler den danske økonomi
BCG Online- Hvordan Internettet forvandler den danske økonomi
 
Presentation smacad
Presentation smacadPresentation smacad
Presentation smacad
 
SA Youth Sex Survey 2011 - by Young Africa Live
SA Youth Sex Survey 2011 - by Young Africa LiveSA Youth Sex Survey 2011 - by Young Africa Live
SA Youth Sex Survey 2011 - by Young Africa Live
 
Jobsati
JobsatiJobsati
Jobsati
 
Singapore property weekly issue 1
Singapore property weekly issue 1Singapore property weekly issue 1
Singapore property weekly issue 1
 
澎湖
澎湖澎湖
澎湖
 
Tripwire march april 2011 v2
Tripwire march april 2011 v2Tripwire march april 2011 v2
Tripwire march april 2011 v2
 
As4tcp paper
As4tcp paperAs4tcp paper
As4tcp paper
 
Internet bijak
Internet bijakInternet bijak
Internet bijak
 
3改善地層下陷
3改善地層下陷3改善地層下陷
3改善地層下陷
 
Ppt test
Ppt testPpt test
Ppt test
 
Storyboard haastattelu 1
Storyboard haastattelu 1Storyboard haastattelu 1
Storyboard haastattelu 1
 
Ode à Natureza
Ode à NaturezaOde à Natureza
Ode à Natureza
 
Hobuse unenaod
Hobuse unenaodHobuse unenaod
Hobuse unenaod
 
Globant Talent Scouting Center
Globant Talent Scouting CenterGlobant Talent Scouting Center
Globant Talent Scouting Center
 
Crunch and sip!!
Crunch and sip!!Crunch and sip!!
Crunch and sip!!
 

Similar a Webműves Kelemen tanácsai, avagy mi kell a PHP falába?

Túlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világábanTúlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világábanOpen Academy
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenKrisztián Gyula Tóth
 
APACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítéseAPACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítésePasaréti Gimi
 
LESS, mint css preprocessor
LESS, mint css preprocessorLESS, mint css preprocessor
LESS, mint css preprocessorLevente Kiraly
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaFerenc Kovács
 
Nagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseNagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseJános Pásztor
 
A PHP 5.4 újdonságai
A PHP 5.4 újdonságaiA PHP 5.4 újdonságai
A PHP 5.4 újdonságaiFerenc Kovács
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Open Academy
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanAntal Orcsik
 
Cgi röviden ajmar
Cgi röviden ajmarCgi röviden ajmar
Cgi röviden ajmarbonami2014
 
Flash és PHP Kommunikáció
Flash és PHP KommunikációFlash és PHP Kommunikáció
Flash és PHP Kommunikációtlof
 
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitőZoltan Balazs
 
A PHP 5.5 újdonságai.
A PHP 5.5 újdonságai.A PHP 5.5 újdonságai.
A PHP 5.5 újdonságai.Ferenc Kovács
 
Univerzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - LaravelUniverzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - LaravelPeter Perger
 
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezni
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezniAmit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezni
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezniFerenc Szalai
 

Similar a Webműves Kelemen tanácsai, avagy mi kell a PHP falába? (20)

Túlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világábanTúlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világában
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Laravel for Dummies
Laravel for DummiesLaravel for Dummies
Laravel for Dummies
 
Webkonf 2013
Webkonf 2013Webkonf 2013
Webkonf 2013
 
APACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítéseAPACHE PHP MYSQL telepítése
APACHE PHP MYSQL telepítése
 
LESS, mint css preprocessor
LESS, mint css preprocessorLESS, mint css preprocessor
LESS, mint css preprocessor
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
 
Nagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztéseNagy terhelésű webes rendszerek fejlesztése
Nagy terhelésű webes rendszerek fejlesztése
 
A PHP 5.4 újdonságai
A PHP 5.4 újdonságaiA PHP 5.4 újdonságai
A PHP 5.4 újdonságai
 
Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!Hogyan optimalizáljunk C/C++ kódokat!
Hogyan optimalizáljunk C/C++ kódokat!
 
Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
 
Linux alapok
Linux alapokLinux alapok
Linux alapok
 
Sles admin
Sles adminSles admin
Sles admin
 
Hello Laravel 5!
Hello Laravel 5!Hello Laravel 5!
Hello Laravel 5!
 
Cgi röviden ajmar
Cgi röviden ajmarCgi röviden ajmar
Cgi röviden ajmar
 
Flash és PHP Kommunikáció
Flash és PHP KommunikációFlash és PHP Kommunikáció
Flash és PHP Kommunikáció
 
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő
[HUN] Zombi tűzróka, avagy mire képes egy rosszindulatú böngősző kiegészitő
 
A PHP 5.5 újdonságai.
A PHP 5.5 újdonságai.A PHP 5.5 újdonságai.
A PHP 5.5 újdonságai.
 
Univerzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - LaravelUniverzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - Laravel
 
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezni
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezniAmit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezni
Amit mindig is tudni akartál az LDAP-ról, de sosem merted megkérdezni
 

Más de Open Academy

BDD demisztifikálva
BDD demisztifikálvaBDD demisztifikálva
BDD demisztifikálvaOpen Academy
 
What SQL should actually be...
What SQL should actually be...What SQL should actually be...
What SQL should actually be...Open Academy
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profilingOpen Academy
 
Firefox OS: hackelni könnyű
Firefox OS:  hackelni könnyűFirefox OS:  hackelni könnyű
Firefox OS: hackelni könnyűOpen Academy
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésOpen Academy
 
Android fejlesztés
Android fejlesztésAndroid fejlesztés
Android fejlesztésOpen Academy
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világaOpen Academy
 
Okostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOkostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOpen Academy
 
Ipari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatbanIpari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatbanOpen Academy
 
Adminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségeiAdminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségeiOpen Academy
 
Naplózás a gyakorlatban
Naplózás a gyakorlatbanNaplózás a gyakorlatban
Naplózás a gyakorlatbanOpen Academy
 
Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?Open Academy
 
AGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztésAGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztésOpen Academy
 
Multiplatform mobil fejlesztések
Multiplatform mobil fejlesztésekMultiplatform mobil fejlesztések
Multiplatform mobil fejlesztésekOpen Academy
 
Verziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekbenVerziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekbenOpen Academy
 

Más de Open Academy (18)

BDD demisztifikálva
BDD demisztifikálvaBDD demisztifikálva
BDD demisztifikálva
 
What SQL should actually be...
What SQL should actually be...What SQL should actually be...
What SQL should actually be...
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profiling
 
Firefox OS: hackelni könnyű
Firefox OS:  hackelni könnyűFirefox OS:  hackelni könnyű
Firefox OS: hackelni könnyű
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztés
 
Android fejlesztés
Android fejlesztésAndroid fejlesztés
Android fejlesztés
 
Magvas gondolatok
Magvas gondolatokMagvas gondolatok
Magvas gondolatok
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világa
 
Okostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOkostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentje
 
Windows 8
Windows 8Windows 8
Windows 8
 
Ipari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatbanIpari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatban
 
Adminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségeiAdminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségei
 
Naplózás a gyakorlatban
Naplózás a gyakorlatbanNaplózás a gyakorlatban
Naplózás a gyakorlatban
 
Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?
 
AGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztésAGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztés
 
Multiplatform mobil fejlesztések
Multiplatform mobil fejlesztésekMultiplatform mobil fejlesztések
Multiplatform mobil fejlesztések
 
Verziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekbenVerziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekben
 

Webműves Kelemen tanácsai, avagy mi kell a PHP falába?

  • 1. Webműves Kelemen tanácsai, avagy mi kell a PHP falába? Buherátor, Buherátor, BuheraBlog
  • 2. Bevezető • “0% ****, 100% tapasztalat” ☺ • …és néhány technikai finomság • A webalkalmazások a vállalati infrastruktúra tipikus gyenge pontjai • Egyedi alkalmazás • Nem nyúlunk hozzá, ameddig mű működik • A PHP remek állatorvosi ló • Jól ismert, jól olvasható, egyszerű • Hírhedten bugos kódok (vagy csak rossz PR?)
  • 3. PHP – Miért szeretjük? Könnyen tanulható, gyorsan fejleszthető C-like syntax Dynamic Typing A Webre szánták Könnyen telepíthető Felmásolom, megy ű Könnyű konfiguráció, akár futásidőben futásidő Jó platform támogatottság Jó dokumentáció, széles felhasználói bázis OOP (>=PHP5) GPL licensz
  • 4. PHP – Miért nem szeretjük Lásd az előző diát :) Kóder Pisti kedvenc nyelve Beépített függvény-vízfej függvény- Következetlen elnevezések, függvény-szignatúrák függvény- − strlen(), str_split() A bőség zavara − mysql_escape_string(), mysql_real_escape_string(), addslashes() … Biztonság...? Y U No Unicode?
  • 5. Lehet jól is csinálni
  • 6. PHP biztonság - óvoda A webszerver korlátozott jogokkal fut, ugye? A register_globals ki van kapcsolva, ugye? URL- URL-eket nem lehet megnyitni, ugye? megnyitni, ugye? A felhasználók nem látják a hibaüzeneteket, ugye?
  • 7. A PHP-s típushiba PHP- • File Include hibák • Azonnali kódfuttatás • Helyi forrásból • Távoli forrásból • Egy kis emlékeztető…
  • 8. Local File Include • <?include(“files/”.$_GET[‘inc’]);?> • Mit futtathatunk? futtathatunk? • Alkalmazáson keresztül feltöltött fájlok • Ideiglenes fájlok • Naplófájlok (pl. PHP kód a User Agentben) Agentben) • Az alkalmazás saját fájljait rossz helyen include- include- olva igen hasznos hibaüzenetek kaphatóak
  • 9. Remote File Include • <?include($_GET[‘inc’].”.php”);?> • allow_url_fopen=True • Mit futtathatunk? • Távoli webkiszolgálón elhelyezett tetsző tetszőleges kódot! • Legtöbbször egyben LFI is…
  • 10. Basedir restriction ő Minden fájlkezelő funkcióban ellenő ellenőrizni kellene a beállítást És minden felhasznált C könyvtárban is… 5.2.9, 5.2.12, 5.3.0, 5.3.1 … mind megkerülhető MOPB: „not simple safe_mode, open_basedir bypass vulnerabilities” Tudta- Tudta-e Ön, hogy 5.2.16 ill. 5.3.4 előtt az itt megadott értékek, elő csak prefixek, nem konkrét könyvtárak voltak? /home/b => /home/b/ , /home/bizalmas/
  • 11. Safe Mode Egy próbálkozás a veszélyes függvények letiltására / korlátozására Minden érintett funkcióban ellenő ellenőrizni kellene a beállítást Az eredmény: hamis biztonságérzet „safe mode is an attempt to solve the shared-server security problem. It is shared- architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren't very realistic, many people, especially ISP's, use safe mode for now” „This is a still probably incomplete and possibly incorrect listing of the functions limited by safe mode. ” 5.3.0 óta deprecated, 6-ban nincs 6-
  • 12. Veszélyes függvények Melyek ezek?
  • 13. Veszélyes függvények - Parancsfuttatás passthru apache_child_terminate exec chown chgrp pnctl_exec link proc_open symlink popen posix_kill system posix_mkfifo shell_exec posix_setpgid posix_setsid register_shutdown_function posix_setuid register_tick_function proc_close dl proc_get_status eval proc_nice preg_replace [!] proc_terminate Putenv ... Touch ...
  • 14. Veszélyes függvények – Hálózat ftp_connect ftp_ssl_connect fsockopen pfsockopen socket_bind socket_connect socket_listen socket_create_listen socket_accept socket_getpeername socket_send ...
  • 15. Veszélyes függvények A listának még koránt sincs vége A modulok nagy részét még nem is láttuk! ő ő űjtemény: Folyamatosan bővülő gyűjtemény: https://github.com/v- https://github.com/v-p-b/DangerousPHPFunctions Erre írjon valaki IDS szabályt, logelemző stb.! logelemzőt, Az eval()-t le sem lehet tiltani eval()- A disable_functions legalább jól kezelhető Szintén hasznos INI paraméterek: extension_dir, enable_dl
  • 16. Fájl felöltés Kedvencünk, tipikus gyenge pont Sok helyen előfordul Legalább 80% sebezhető Legtöbb esetben azonnal kódot futtathatunk őségek Alattomos hibalehetőségek
  • 17. Fájl feltöltés - Ökölszabályok űrés Fehérlistás szűrés kiterjesztésekre De: Egy JPG-t is lehet futtatni include() hibával! JPG- Nevezzük át a feltöltött fájlt! A fájlnév is tartalmazhat shell, PHP utasításokat! Ha JPG-re számítunk, legyen ez az új kiterjesztés! JPG- Ha nem muszáj, ne a webroot alá töltsünk fel! Egy diszpécser szkript jogosultságot ellenő ellenőrizhet, MIME típust állíthat stb. A képeket transzformáljuk! A dupla kiterjesztéseket kerüljük!
  • 18. Fájlfeltöltés – Az Apache trükk űrünk Fehérlistával szűrünk kiterjesztéseket $allowed=array(„.avi”,”.mov”,”.qt”); if (inarray(strrchr($name,'.'),$allowed)) return ACCEPT; Feltöltök egy shell.php.qt nevű fájlt A kiterjesztés megfelelő Az Apache viszont nem ismeri a .qt kiterjesztést, ezért a következőt veszi figyelembe kiszolgáláskor! őt Van egy PHP shellünk...
  • 19. Fájlfeltöltés – IIS-en IIS- ugyanez <= IIS 6 evil.asp;.jpg vagy evil.asp:.jpg A ; ill. : utáni részeket a kiszolgáló nem veszi figyelembe
  • 20. Fájlfeltöltés - Formátumellenő Formátumellenőrzés
  • 21. Fájlfeltöltés - Formátumellenő Formátumellenőrzés
  • 22. Képek átméretezése • image_resize.php?width=100&height=100 image_resize.php?width=100&height=100 • “Öröm, bódottá” Öröm, bódottá” • image_resize.php?width=10000&height=10000 image_resize.php?width=10000&height=10000 • DoS, DoS, nemöröm • Nem csak a webes hibákra kell figyelni! figyelni! • “A támadások soha nem lesznek rosszabbak” rosszabbak”
  • 23. Fájlfeltöltés - RFC1867 Gynvael Coldwind, 2011 ő, Nem jellemző, de nagyon szép :) Feltételezzük, hogy már van egy helyi include hiba Linuxon általában ez sem elég Nagyrészt Windows lehető lehetőség
  • 26. Fájlfeltöltés - RFC1867 A feltöltött fájlok véletlenszerű nevet kapnak ellenőrzés előtt A könyvtár általában default Windowson 16-bit véletlen – nem túl sok 16- De a Windows értelmezi a wildcardokat !(!!1) !(!!1 őleges << Tetszőleges karakterlánc < Tetszőleges karakter ő Első egyezés kiválasztása
  • 27. Adatbázis elérés • Az SQL injection rossz, értem? rossz, értem? • Ugye mindenki tudja mi az az SQL injection…? • MySQL- MySQL-hez van remek escape függvény! függvény! • mysql_escape_string() mysql_escape_string() • Azaz mégsem olyan jó… jó…
  • 28. Adatbázis elérés – SQL Smuggling • A DBMS okosan az érvényes locale szerint próbálja átalakítani a spéci karaktereket • Á -> A, Í->I, Ű->U … Í - Ű- • A mysql_escape_string() nem veszi figyelembe az adatbázis locale-t locale- • Az PHP escape és a DBMS konverzió után újra injectionre alkalmas karakterlánc állhat elő • http://wechall.net/challenge/addslashes/index.php • őben Élőben még nem láttam ilyet, de …
  • 29. Adatbázis elérés Ugye senki sem karakterláncként pakolja össze a lekérdezéseit?
  • 30. Adatbázis elérés - Prepared statements • Hatékony! Hatékony! • Feldolgozás, fordítás, tervezés, stb. Feldolgozás, fordítás, tervezés, stb. csak egyszer! egyszer! • Biztonságos! Biztonságos! • Adat és SQL elválasztva • Típusegyeztetés • PHP- PHP-ban tipikusan valamilyen absztrakciós rétegen keresztül • PDO • ODBC • …
  • 31. Adatbázis elérés - ORM • Object Relational Mapping • DB entitás -> Objektum • A legtöbb keretrendszer tudja • Szintén biztonságos • Ha a keretrendszerben nem szúrtak el valamit… valamit… • Nagyon kényelmes • PHP és SQL elválasztva • Sokszor nem hatékony • Nem minden queryt lehet megfogalmazni
  • 32. Adatbázis elérés - ORM • A “fogalmazási” problémákat sokszor a subquery-k subquery- okozzák • JOIN- JOIN-olj okosan, subquery-k általában subquery- feleslegesek! • Használjunk VIEW-kat! VIEW- • Használjunk tárolt eljárásokat! • Melyekben figyelünk az SQL injectionre :P
  • 33. Süti attributumok - HttpOnly • Tankönyvi XSS példa: <script>alert(document.cookie)</script> • HttpOnly: Kliens oldali szkriptek nem férhetnek hozzá a sütihez! • ő Böngésző feature, nem biztos, hogy mindenhol implementálták! • ől Ettől a XSS még veszélyes marad! • Teljes kontroll a felhasználó jogosultságaival!
  • 34. Süti attributumok - HttpOnly • PHP- PHP-ban alapértelmezetten nincs beállítva a flag a session- session-ökre • php.ini: session.cookie_httponly=On • PHP 5.2.0-től 5.2.0- • session_set_cookie_params() • Más sütiknél: setcookie() utolsó paramétere
  • 35. Süti attributumok - Secure • Kapkodjuk el a hálózaton röpködő sütiket, és jelentkezzünk be velük • https://github.com/asciimoo/whol • Firesheep (esélyes Most Overhyped Extension) • Bár a kommunikáció HTTPS-en zajlik, HTTPS- ő kikényszeríthető a süti titkosítatlan küldése • <img src=“http://bank.com/logo.png”/> src=“http://bank.com/logo.png”/> • Secure: A süti csak titkosított csatornán továbbítható! • ő Böngésző feature, nem biztos, hogy mindenhol implementálták!
  • 36. Süti attributumok - Secure • PHP- PHP-ban alapértelmezetten nincs beállítva a flag a session- session-ökre • php.ini: session.cookie_secure=On • PHP 4.0.4-től 4.0.4- • session_set_cookie_params() • Más sütiknél: setcookie() utolsó elő paramétere előtti
  • 37. CSRF • Az XSS meg az SQLi lejárt lemez • Mindenki ismeri • Mindenhol működik… • A Cross-Site Request Forgery is lejárt lemez, de alig Cross- ismerik • “Miért kellene nekem ilyesmivel foglalkoznom?” • Jogos kérdés!
  • 38. CSRF • Autentikáció általában sütikkel • ő A böngésző egy sütitárat használ • A felhasználó több lapon böngészik • Ha egy idegen oldalon elhelyezett form küld adatot egy másik oldalra, ahová a felhasználó be van ő jelentkezve, a böngésző automatikusan küldi az érvényes sütit
  • 39. CSRF
  • 40. CSRF • Használjunk véletlen adatokat tartalmazó mező mezőket minden formon • Ez a token… • ennek a felhasználónak… • erre az űrlapra lett kiadva • Referer validáció • Az áldozat nem fogja meghamisítani a saját Referer- Referer-ét • Ha titkosítatlan a csatorna, akkor már úgyis mindegy
  • 41. Védelem - WAF • Web Application Firewall • Layer7 • Komoly helyen alapkellék • Kiddie- Kiddie-k és tömeges, automatizált támadások ellen kiváló • Aki át akar menni rajta, az elő -utóbb át fog menni. előbb előbb-
  • 42. Védelem - PHPIDS • include()- include()-dal behúzható PHP könyvtár • ő Modulként elérhező több CMS-hez CMS- • Impresszív szabálykészlet • Jól karbantartott • De hol használják?
  • 43. Védelem - Suhosin • Patch • BoF védelem • Format String védelem • Láncolt listák, hash-táblák védelme listák, hash- • FreeBSD realpath() realpath() • … • Extension • Megregulázott preg_replace() preg_replace() • Titkosított sütik • Végtelen rekurziók megállítása • … • És még rengeteg hasznos funkció
  • 44. Védelem – Kód review • Költséghatékony, Költséghatékony, testreszabható megoldás: grep megoldás: • grep ‘mysql_query’ mysql_query’ • grep ‘SELECT’ • grep ‘$_GET’ • grep ‘eval(’ eval(’ • grep ‘print_r(’ print_r(’ • Csak a fantázia szab határt! ☺ határt!
  • 45. Emlékeztető • Webalkalmazás nem létezik önállóan • HTTP szerver • Böngésző • DBMS • Távoli szolgáltatások • ??? • őnek Egy jó fejlesztőnek ismernie kell az általa fejlesztett alkalmazás környezetét is! • A webes támadások általában nem technológia-specifikusak technológia-
  • 47. Linkek • http://www.owasp.org • http://www.hardened- http://www.hardened-php.net/ • http://www.exploit- http://www.exploit-db.com/download_pdf/17010 • http://www.exploit- http://www.exploit-db.com/download_pdf/15955 • http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real- http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real- escape- escape-string • http://blog.mindedsecurity.com/2009/05/http-parameter- http://blog.mindedsecurity.com/2009/05/http-parameter- pollution-new-web- pollution-new-web-attack.html • http://blog.mindedsecurity.com/2009/05/client-side-http- http://blog.mindedsecurity.com/2009/05/client-side-http- parameter- parameter-pollution.html • http://resources.infosecinstitute.com/finding-bugs-in-php- http://resources.infosecinstitute.com/finding-bugs-in-php- using- using-grep/ • http://buhera.blog.hu ;)