SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
 


        Zásady bezpečného programovania v PHP
             Zabezpečenie LAMP konfigurácie

                 Ing. Pavol Lupták, CISSP, CEH
                   nethemba@nethemba.com


                                

     www.nethemba.com                          www.nethemba.com      
Kontrola vstupu
    ●
        nutnosť kontrolovať všetky vstupné parametre  
        (nielen bezprostredne zadané užívateľom, aj 
        User­Agent, http referer apod), použiť whitelist 
    ●
        ochrana voči SQL injection addslashes(), 
        stripslashes(), mysql_real_escape_string(), 
        XSS útokom htmlspecialchars() 
    ●
        nepoužívať strip_tags() (neodstraňuje atribúty, 
        jedine ak chceme čisto plaintextový výstup)
                               

     www.nethemba.com
PHPIDS
   ●
        použiť PHPIDS na všetky užívateľské vstupy
   ●
        jednoduchá integrácia do aplikácie
   ●
        „váhovanie“ užívateľského vstupu (numerical 
        impact rating) – možnosť sa rozhodnúť, čo so 
        vstupom ďalej spraviť – len zalogovať, 
        zablokovať žiadosť, notifikovať admina..
                               

     www.nethemba.com
Globálne premenné
  ●
          PHP nedeklaruje premenné, len definuje – táto 
          vlastnosť môže byť zneužitá útočníkom
  ●
          nepoužívať globálne premenné 
          (register_globals = off )
  ●
          vstupné dáta používať z $_GET, $_POST, 
          $_REQUEST, $_COOKIES ...

                                  

     www.nethemba.com
magic_quotes_gpc
    ●
        „escapuje“ uvodzovky v „queries“
    ●
        veľmi málo účinný bezpečnostný workaround:
    ●
        programátori sa implicitne spoliehajú na 
        ošetrenie vstupov PHP 
    ●
        dá sa ľahko obísť ak útočník použije napríklad 
        hexadecimálnu reprezentáciu a úvodzovky 
        úplne vynechá (0x61646D696E = 'root')
                                

     www.nethemba.com
PHP Safe Mode
    ●
        vypína použitie nebezpečných funkcií 
        (system(), exec(), popen())
    ●
        definuje adresár spustiteľných súborov 
        (safe_mode_exec_dir)
    ●
        definuje strom povolených súborov 
        (open_base_dir)
    ●
        vypína nebezpečné funkcie/triedy 
     
        (disable_functions, disable_classes)
                                

     www.nethemba.com
Prepared SQL statements
    ●
        SQL queries vznikajú „lepením“, vstupy nie sú 
        veľakrát poriadne ošetrené
    ●
        je potrebné použiť PHP5 mysqli „prepared 
        statements“ mysqli_stmt_prepare() / 
        mysqli_stmt_bind_param() / 
        mysqli_stmt_bind_result() 
    ●
     
        defacto odpadne hrozba SQL injection útokov
                               

     www.nethemba.com
MySQL5 stored procedúry
    ●
        Použiť MySQL5 Stored procedúry
    ●
        možnosť „n­tier“ aplikácie – lepšia separácia 
        dátovej vrstvy od aplikačnej
    ●
        útočník pri kompromitovaní aplikácie nezíska 
        fyzický prístup k tabuľkám, ale len k 
        definovaným stored procedúram
                                

     www.nethemba.com
Klasické bezpečnostné problémy I.
    ●
        validácia formulárov len cez JavaScript (nie na 
        serveri!)
    ●
        prenos/modifikácia dát v HIDDEN fieldoch 
        formulárov (nikdy neveriť užívateľskému 
        vstupu!)
    ●
        staré verzie PHP zdrojových kódov, DB 
        dumpov, patchov na produkčných serveroch
                               

     www.nethemba.com
Klasické bezpečnostné problémy II.
    ●
        všetky citlivé dáta by mali byť mimo webrootu
    ●
        zapnutá http basic autentizácia (možnosť 
        rýchleho útoku hrubou silou – použiť digest, 
        resp. klientské certifikáty)




                               

     www.nethemba.com
Logovanie
    ●
        nevyhnutné, aby bola dodržaná „accountability“
    ●
        logovať krátko a prehľadne 
    ●
        dátum, čas, IP adresa, miesto v kódu, typ 
        hlášky
    ●
        logy offline uchovávať, príp. na write­once 
        médium, digitálne podpisovať
    ●
        pozor na log injection !
                                    

     www.nethemba.com
Ako zabezpečiť LAMP systém I.
  ●
      Apache chroot (buď libapache2­mod­chroot, 
      resp. SecChrootDir z balíčka mod_security)
  ●
      Separácia pomocou virtualizačných 
      prostriedkov (XEN, VMWare)
  ●
      Úpravy zo strany aplikácie: prístup k MySQL 
        musí byť cez TCP, nie Unixové sockety, pošta 
        musí byť posielaná cez SMTP (napr. Pear Mail) 
        nie cez mail(), ktorý volá /usr/sbin/sendmail
                                   

     www.nethemba.com
Ako zabezpečiť LAMP systém II.
    ●
        Použiť WAF (Web Application Firewall) – veľmi 
        robustný opensource WAF je mod_security
    ●
        dokáže zablokovať 70­90% všetkých útokov na 
        vstupy aplikácie (XSS, SQL/LDAP injection, ..)
    ●
        Úpravy zo strany aplikácie: žiadne, ak 
        aplikácia nepoužíva na vstupoch špeciálne 
        metaznaky, veľké, ak používa zvrhlé vstupy:­) 
                               

     www.nethemba.com
Ako zabezpečiť LAMP systém III.
  ●
      zapnúť PHP Safe mode, znemožniť 
      vykonávanie nebezpečných funkcií (system(), 
      exec(), popen(), phpinfo(), ..)
  ●
      vypnúť URL fopen, register_globals, zapnúť 
      quotovania queries (magic_quotes_gpc), 
      definovať open_basedir, safe_mod_exec_dir, 
      safe_mod_include_dir
  ●
      Úpravy zo strany aplikácie: relatívne veľké
                             

     www.nethemba.com
Ako zabezpečiť LAMP systém IV.
  ●
          Použiť PHP Suhosin / Core GRASP
  ●
          Engine / Runtime / Session ochrana
  ●
          Filtrovacie / logovacie možnosti  
  ●
          účinna ochrana voči SQL injection útokom, 
          experimentálna heuristická detekcia
  ●
          Úpravy zo strany aplikácie: malé (nutné 
          otestovať)               

     www.nethemba.com
Ako zabezpečiť LAMP systém V.
    ●
        použiť suPHP
    ●
        umožňuje púšťať PHP skripty s oprávneniami 
        ich vlastníka, možnosť chrootu
    ●
        lepšia segregácia virtualhostov – útočník, keď 
        kompromituje jeden web nezíska automaticky 
        prístup k ďalšiemu
    ●
        Úpravy zo strany aplikácie: minimálne
                              

     www.nethemba.com
Ako zabezpečiť LAMP systém VI.
    ●
        nasadiť NSA SELinux (Secure­Enhanced)
    ●
        implementácia MAC použitím LSM nad 
        Linuxovým jadrom využívajúca princíp „least 
        privilege“
    ●
        MAC = DTE + RBAC + MLS
    ●
        Úpravy zo strany aplikácie: relatívne malé, 
        ladenie politiky je ale náročné, nutnosť 
     
        detailného testovania  
     www.nethemba.com
Ideálny stav bezpečnosti aplikácie
    ●
        ošetrovania všetkých vstupov, 3  layer 
                                      rd


        architektúra aplikácie (stored procedúry) + 
        prepared statements + PHPIDS + Apache 
        chroot + mod_security WAF + PHP Safe mode 
        + PHP Safe settings + PHP Suhosin + Core 
        GRASP + suPHP + detailné logovanie + NSA 
        SELinux so zapnutým RBAC/DTE/MLS

                               

     www.nethemba.com
 




        Vďaka za pozornosť


                         

     www.nethemba.com

Más contenido relacionado

Similar a Php sec

Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)
DCIT, a.s.
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight Edition
Adam Lieskovsky
 
Bezpečnosť mobilných aplikácií (Martin Zajíček)
Bezpečnosť mobilných aplikácií (Martin Zajíček)Bezpečnosť mobilných aplikácií (Martin Zajíček)
Bezpečnosť mobilných aplikácií (Martin Zajíček)
DCIT, a.s.
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
Jano Suchal
 
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
webelement
 
Správa pamäte
Správa pamäteSpráva pamäte
Správa pamäte
jerrycek
 
Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010
Michal Fojtik
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
Jano Suchal
 

Similar a Php sec (20)

Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)Bezpečnosť webových aplikácií (Martin Zajíček)
Bezpečnosť webových aplikácií (Martin Zajíček)
 
Tomáš Corej: Od sdíleného hostingu po server
Tomáš Corej: Od sdíleného hostingu po serverTomáš Corej: Od sdíleného hostingu po server
Tomáš Corej: Od sdíleného hostingu po server
 
Ať se z kódu nepráší!
Ať se z kódu nepráší!Ať se z kódu nepráší!
Ať se z kódu nepráší!
 
Mne to na notebooku funguje
Mne to na notebooku fungujeMne to na notebooku funguje
Mne to na notebooku funguje
 
Tastypie
TastypieTastypie
Tastypie
 
Programovanie v C++
Programovanie v C++Programovanie v C++
Programovanie v C++
 
There is much more to C
There is much more to CThere is much more to C
There is much more to C
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight Edition
 
Bezpečnosť mobilných aplikácií (Martin Zajíček)
Bezpečnosť mobilných aplikácií (Martin Zajíček)Bezpečnosť mobilných aplikácií (Martin Zajíček)
Bezpečnosť mobilných aplikácií (Martin Zajíček)
 
Libraries and tools for C++
Libraries and tools for C++Libraries and tools for C++
Libraries and tools for C++
 
Bezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológiíBezpečnosť v kontexte RIA technológií
Bezpečnosť v kontexte RIA technológií
 
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrumCodecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
Codecon.sk - Ako škálovať PHP stránky? Od malej stránky až po datacentrum
 
Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?Ako si vybrať programovací jazyk a framework?
Ako si vybrať programovací jazyk a framework?
 
Junior Internet 2015 - PHP moderne a správne
Junior Internet 2015 - PHP moderne a správneJunior Internet 2015 - PHP moderne a správne
Junior Internet 2015 - PHP moderne a správne
 
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
Marek Lichtner - Používať alebo nepoužívať ORM vo webových aplikáciách?
 
Správa pamäte
Správa pamäteSpráva pamäte
Správa pamäte
 
Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010Deltacloud Presentation OpenHouse 2010
Deltacloud Presentation OpenHouse 2010
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Telnet and SSH
Telnet and SSHTelnet and SSH
Telnet and SSH
 
Preco sa rozhodnut pre spolocnost Nethemba
Preco sa rozhodnut pre spolocnost NethembaPreco sa rozhodnut pre spolocnost Nethemba
Preco sa rozhodnut pre spolocnost Nethemba
 

Más de OWASP (Open Web Application Security Project) (8)

Paralelni polisweb
Paralelni poliswebParalelni polisweb
Paralelni polisweb
 
Nethemba - Writing exploits
Nethemba - Writing exploitsNethemba - Writing exploits
Nethemba - Writing exploits
 
Planning the OWASP Testing Guide v4
Planning the OWASP Testing Guide v4Planning the OWASP Testing Guide v4
Planning the OWASP Testing Guide v4
 
Bypassing Web Application Firewalls
Bypassing Web Application FirewallsBypassing Web Application Firewalls
Bypassing Web Application Firewalls
 
Nove trendy-zranitelnosti
Nove trendy-zranitelnostiNove trendy-zranitelnosti
Nove trendy-zranitelnosti
 
Nethemba profil
Nethemba profilNethemba profil
Nethemba profil
 
1.nove trendy-zranitelnosti luptak
1.nove trendy-zranitelnosti luptak1.nove trendy-zranitelnosti luptak
1.nove trendy-zranitelnosti luptak
 
Nethemba profil
Nethemba profilNethemba profil
Nethemba profil
 

Php sec

  • 1.   Zásady bezpečného programovania v PHP Zabezpečenie LAMP konfigurácie Ing. Pavol Lupták, CISSP, CEH nethemba@nethemba.com          www.nethemba.com      www.nethemba.com      
  • 2. Kontrola vstupu ● nutnosť kontrolovať všetky vstupné parametre   (nielen bezprostredne zadané užívateľom, aj  User­Agent, http referer apod), použiť whitelist  ● ochrana voči SQL injection addslashes(),  stripslashes(), mysql_real_escape_string(),  XSS útokom htmlspecialchars()  ● nepoužívať strip_tags() (neodstraňuje atribúty,    jedine ak chceme čisto plaintextový výstup)        www.nethemba.com
  • 3. PHPIDS ● použiť PHPIDS na všetky užívateľské vstupy ● jednoduchá integrácia do aplikácie ● „váhovanie“ užívateľského vstupu (numerical  impact rating) – možnosť sa rozhodnúť, čo so  vstupom ďalej spraviť – len zalogovať,  zablokovať žiadosť, notifikovať admina..          www.nethemba.com
  • 4. Globálne premenné ● PHP nedeklaruje premenné, len definuje – táto  vlastnosť môže byť zneužitá útočníkom ● nepoužívať globálne premenné  (register_globals = off ) ● vstupné dáta používať z $_GET, $_POST,  $_REQUEST, $_COOKIES ...          www.nethemba.com
  • 5. magic_quotes_gpc ● „escapuje“ uvodzovky v „queries“ ● veľmi málo účinný bezpečnostný workaround: ● programátori sa implicitne spoliehajú na  ošetrenie vstupov PHP  ● dá sa ľahko obísť ak útočník použije napríklad  hexadecimálnu reprezentáciu a úvodzovky    úplne vynechá (0x61646D696E = 'root')        www.nethemba.com
  • 6. PHP Safe Mode ● vypína použitie nebezpečných funkcií  (system(), exec(), popen()) ● definuje adresár spustiteľných súborov  (safe_mode_exec_dir) ● definuje strom povolených súborov  (open_base_dir) ● vypína nebezpečné funkcie/triedy    (disable_functions, disable_classes)        www.nethemba.com
  • 7. Prepared SQL statements ● SQL queries vznikajú „lepením“, vstupy nie sú  veľakrát poriadne ošetrené ● je potrebné použiť PHP5 mysqli „prepared  statements“ mysqli_stmt_prepare() /  mysqli_stmt_bind_param() /  mysqli_stmt_bind_result()  ●   defacto odpadne hrozba SQL injection útokov        www.nethemba.com
  • 8. MySQL5 stored procedúry ● Použiť MySQL5 Stored procedúry ● možnosť „n­tier“ aplikácie – lepšia separácia  dátovej vrstvy od aplikačnej ● útočník pri kompromitovaní aplikácie nezíska  fyzický prístup k tabuľkám, ale len k  definovaným stored procedúram          www.nethemba.com
  • 9. Klasické bezpečnostné problémy I. ● validácia formulárov len cez JavaScript (nie na  serveri!) ● prenos/modifikácia dát v HIDDEN fieldoch  formulárov (nikdy neveriť užívateľskému  vstupu!) ● staré verzie PHP zdrojových kódov, DB    dumpov, patchov na produkčných serveroch        www.nethemba.com
  • 10. Klasické bezpečnostné problémy II. ● všetky citlivé dáta by mali byť mimo webrootu ● zapnutá http basic autentizácia (možnosť  rýchleho útoku hrubou silou – použiť digest,  resp. klientské certifikáty)          www.nethemba.com
  • 11. Logovanie ● nevyhnutné, aby bola dodržaná „accountability“ ● logovať krátko a prehľadne  ● dátum, čas, IP adresa, miesto v kódu, typ  hlášky ● logy offline uchovávať, príp. na write­once  médium, digitálne podpisovať ● pozor na log injection !          www.nethemba.com
  • 12. Ako zabezpečiť LAMP systém I. ● Apache chroot (buď libapache2­mod­chroot,  resp. SecChrootDir z balíčka mod_security) ● Separácia pomocou virtualizačných  prostriedkov (XEN, VMWare) ● Úpravy zo strany aplikácie: prístup k MySQL  musí byť cez TCP, nie Unixové sockety, pošta  musí byť posielaná cez SMTP (napr. Pear Mail)    nie cez mail(), ktorý volá /usr/sbin/sendmail        www.nethemba.com
  • 13. Ako zabezpečiť LAMP systém II. ● Použiť WAF (Web Application Firewall) – veľmi  robustný opensource WAF je mod_security ● dokáže zablokovať 70­90% všetkých útokov na  vstupy aplikácie (XSS, SQL/LDAP injection, ..) ● Úpravy zo strany aplikácie: žiadne, ak  aplikácia nepoužíva na vstupoch špeciálne  metaznaky, veľké, ak používa zvrhlé vstupy:­)           www.nethemba.com
  • 14. Ako zabezpečiť LAMP systém III. ● zapnúť PHP Safe mode, znemožniť  vykonávanie nebezpečných funkcií (system(),  exec(), popen(), phpinfo(), ..) ● vypnúť URL fopen, register_globals, zapnúť  quotovania queries (magic_quotes_gpc),  definovať open_basedir, safe_mod_exec_dir,  safe_mod_include_dir ● Úpravy zo strany aplikácie: relatívne veľké          www.nethemba.com
  • 15. Ako zabezpečiť LAMP systém IV. ● Použiť PHP Suhosin / Core GRASP ● Engine / Runtime / Session ochrana ● Filtrovacie / logovacie možnosti   ● účinna ochrana voči SQL injection útokom,  experimentálna heuristická detekcia ● Úpravy zo strany aplikácie: malé (nutné    otestovať)        www.nethemba.com
  • 16. Ako zabezpečiť LAMP systém V. ● použiť suPHP ● umožňuje púšťať PHP skripty s oprávneniami  ich vlastníka, možnosť chrootu ● lepšia segregácia virtualhostov – útočník, keď  kompromituje jeden web nezíska automaticky  prístup k ďalšiemu ●   Úpravy zo strany aplikácie: minimálne        www.nethemba.com
  • 17. Ako zabezpečiť LAMP systém VI. ● nasadiť NSA SELinux (Secure­Enhanced) ● implementácia MAC použitím LSM nad  Linuxovým jadrom využívajúca princíp „least  privilege“ ● MAC = DTE + RBAC + MLS ● Úpravy zo strany aplikácie: relatívne malé,  ladenie politiky je ale náročné, nutnosť    detailného testovania        www.nethemba.com
  • 18. Ideálny stav bezpečnosti aplikácie ● ošetrovania všetkých vstupov, 3  layer  rd architektúra aplikácie (stored procedúry) +  prepared statements + PHPIDS + Apache  chroot + mod_security WAF + PHP Safe mode  + PHP Safe settings + PHP Suhosin + Core  GRASP + suPHP + detailné logovanie + NSA  SELinux so zapnutým RBAC/DTE/MLS          www.nethemba.com
  • 19.   Vďaka za pozornosť          www.nethemba.com