protegendo sites php no seu servidor web

39
Cláudio Borges cborges@openbsd‐sp.org

Upload: manuel-lemos

Post on 24-May-2015

2.720 views

Category:

Technology


4 download

DESCRIPTION

Palestra dada por Claudio Borges no CONAPHP 2008 - Congresso Nacional de PHP que ocorreu em São Paulo nos dias 18 e 19 de Outubro dentro do CONISLI 2008

TRANSCRIPT

Page 1: Protegendo sites php no seu servidor web

CláudioBorgescborges@openbsd‐sp.org

Page 2: Protegendo sites php no seu servidor web

OQueseráabordado

  Oporquedasegurança.  Diretivasefunçõesperigosas.  Configurandooopen_basedire

disable_functions.  Utilizandoasdiretivasphp_flagephp_value.  Apolêmicadoregister_globals.  Mod_security.  Suhoshin.  Cuidadoscomlogseexibiçãodeerrosem

ambientedeprodução.  Programandocomsegurança.

Page 3: Protegendo sites php no seu servidor web

OPorquedasegurança

Page 4: Protegendo sites php no seu servidor web

  Falhaspodemexistiremqualquersistema.  Programasinsegurospodemserfeitosem

qualquerlinguagem.  Protegerasaplicaçõeswebétarefatantodo

administradorquandodoprogramador.  Muitasfeaturesajudamnaprogramaçãomas

diminuemasegurança.  Porserumalinguagemmuitorica,muitos

programadoresnãoconsideramqueasegurançatambémdependedaqualidadedoseucódigoPHP.

Page 5: Protegendo sites php no seu servidor web

Diretivasperigosas

Page 6: Protegendo sites php no seu servidor web

  allow_url_fopen–Permiteutilizararquivosexternoscomosefossemarquivoslocais.

  allow_url_include–Permiteutilizararquivosexternoseminclude/require.

  expose_php–Adicionaumaassinaturanoheaderdoseuservidorweb,informandoqueophpestáinstalado.

Page 7: Protegendo sites php no seu servidor web

  Exemplodeusodesitemaldesenvolvidoeallow_url_fopen/allow_url_includehabilitado:

Page 8: Protegendo sites php no seu servidor web

  Agoradesabilitado:

Page 9: Protegendo sites php no seu servidor web

  Exemplodescanemservidorcomexpose_phphabilitado:

Page 10: Protegendo sites php no seu servidor web

  Ecomeledesabilitado:

Page 11: Protegendo sites php no seu servidor web

Funçõesperigosas

Page 12: Protegendo sites php no seu servidor web

  Asfunçõesexec,shellexec,systemepassthruexecutamcomandosexternos.

  Outrasfunções:phpinfo,proc_open,proc_nice,chdir,chroot,dir,closedir,getcwd,opendir,readdir,rewinddir,scandir,popen,pcntl_exec,pcntl_fork,pcntl_alarm,pcntl_setpriority,pcntl_signal,pcntl_wait,pcntl_waitpid,ini_get,ini_get_all,ini_set,ini_restore.

Page 13: Protegendo sites php no seu servidor web

Configurandooopen_basediredisable_functions

Page 14: Protegendo sites php no seu servidor web

  open_basedir–DefineosdiretóriosapartirdosquaisoPHPpodeutilizar.

open_basedir = /var/www/:/tmp/

  disable_functions–Permitedesabilitarfunçõesquenãoprecisemserutilizadas.

disable_functions = phpinfo, shell_exec, exec, passthru, proc_open, proc_nice, system, chdir, chroot, dir, closedir, getcwd, opendir, readdir, rewinddir, scandir, popen, pcntl_exec, pcntl_fork, pcntl_alarm, pcntl_setpriority,

pcntl_signal, pcntl_wait, pcntl_waitpid, ini_get, ini_get_all, ini_set, ini_restore

Page 15: Protegendo sites php no seu servidor web

  Exemplodeumapáginasemopen_basedirconfigurado:

Page 16: Protegendo sites php no seu servidor web

  Outroexemplo:crieiumarquivochamadoreadfile.phpcomoseguinteconteúdo:

<?php readfile(‘/etc/passwd’); ?>

  Eoresultado:

Page 17: Protegendo sites php no seu servidor web

  Eomesmoexemplocomeleconfigurado:open_basedir = /var/www/:/tmp/

Page 18: Protegendo sites php no seu servidor web

  Ecomocódigodoreadfile.php:

Page 19: Protegendo sites php no seu servidor web

Apolêmicadoregister_globals

Page 20: Protegendo sites php no seu servidor web

  Comregister_globalshabilitado,sãocriadasvariáveislocaiscomonomeequivalenteàsdaEGPCS.

  Épossívelutilizarregister_globalshabilitadoeterminhaaplicaçãosegura?

  Porquetantosprogramadoresinsistememhabilitarregister_globals?

  Porquenãoutilizarregister_globals?

Page 21: Protegendo sites php no seu servidor web

Exemplosdeusoderegister_globals

Page 22: Protegendo sites php no seu servidor web

  Exemplodecódigocomregister_globalshabilitado:

if (authenticated_user())

$auth = true;

if ($auth)

echo “Usuário autorizado…”;

else

echo “Usuário sem autorização!”;

  OcódigoacimapodeserfacilmenteburladocomaseguinteURL:

http://www.site.com.br?login.php?auth=1

Page 23: Protegendo sites php no seu servidor web

  Eagoradaformacorreta:

if (authenticated_user())

$_SESSION[‘auth’] = true;

if ($_SESSION[‘auth’])

echo “Usuário autorizado…”;

else

echo “Usuário sem autorização!”;

Page 24: Protegendo sites php no seu servidor web

Utilizandoasdiretivasphp_flagphp_value

Page 25: Protegendo sites php no seu servidor web

  Comasdiretivasphp_value,php_flag,épossíveldefiniropçõespersonalizadasparacadavhostviaarquivos.htaccess.ÉnecessárioqueadiretivaAllowOverrideestejadefinidacomovalorAll.

  Asdiretivasphp_admin_flagephp_admin_valuesópodemserutilizadasemarquivosdeconfiguraçãodoApacheenãopodemsersobrescritaspordiretivas.htaccess.

Page 26: Protegendo sites php no seu servidor web

  Exemplodeusodadiretivaphp_admin_value:

Page 27: Protegendo sites php no seu servidor web

Mod_security

Page 28: Protegendo sites php no seu servidor web

  Éumfirewalldeaplicaçãoweb(WAF).  ÉummódulodoApache.  Monitoramento,detecçãoeprevençãoemtemporeal.

  Existemarquivosderegrasdisponíveisparadownload.

  Vocêmesmopodecriarsuasregras.  Épossívelcriarwhitelists.

Page 29: Protegendo sites php no seu servidor web

Suhoshin

Page 30: Protegendo sites php no seu servidor web

  UmpatchparaoPHPquepodeserutilizadocomoestensão.

  Proteçãoemtempodeexecução.  Temmododesimulaçãoeproteção.  Aceitafiltrarentradadedados.  Permiteencriptarsessões.  Proteçãodememória.  Aplicalimitesderequisiçõesportipodevariável.  Váriasopçõesdelogs.  Aceitacriarwhitelist/blacklist.

Page 31: Protegendo sites php no seu servidor web

Cuidadoscomlogseexibiçãodeerrosemambientede

produção

Page 32: Protegendo sites php no seu servidor web

  Gravarlogsdeerroséútilparadebugarproblemas.

  Ousuárionãodeveteracessoatodasasinformaçõesdeerro.

  Exibirerrosemambientedeproduçãopodefornecerinformaçõessobresistemaeservidor.

Page 33: Protegendo sites php no seu servidor web

Opçõesdeerroselogsnophp.ini

Page 34: Protegendo sites php no seu servidor web

  error_reporting–Definequaisníveisdeerrosserãoreportados.

  display_errors–Determinaseoserrosdevemserexibidoscomopartedasaídaounão.

  log_errors–Defineseoserrosserãogravadosemarquivoounão.

  error_log–Defineemqualarquivooserrosserãogravados.Necessitaqueolog_errorsestejaativado.

Page 35: Protegendo sites php no seu servidor web

Programandocomsegurança

Page 36: Protegendo sites php no seu servidor web

  Sempreverifiqueotipodedado,utilizefunçõesctype_alpha,ctype_alnum,ctype_digit,is_numeric,is_digit,eexpressõesregulares.

  Filtreosdadosdeentradacomfunçõesdotipofilter_varefilter_input.

  Utilizarfunçõesdeescapeoutput,comoporexemplohtmlentities,strip_tags.

  Nuncautilizemagic_quotes.  Nuncaarmazenesenhaemtextoplano,utilize

hashes(md5,sha1,…).  Utilizerequire_oncenolugardeinclude.  Nuncaconfieemusuário,sempreverifiquea

origemdosdados.

Page 37: Protegendo sites php no seu servidor web

Referências

Page 38: Protegendo sites php no seu servidor web

  Siteoficialdalinguagemphp:http://www.php.net

  Siteoficialdomod_securityhttp://www.modsecurity.org

  Siteoficialdosuhoshin:http://www.hardened‐php.net/suhosin/

  Siteoficialdophpsecinfo:http://phpsec.org/projects/phpsecinfo/index.html

  SiteoficialdoChorizo:https://chorizo‐scanner.com

Page 39: Protegendo sites php no seu servidor web

Perguntas?

cborges@openbsd‐sp.org

IRC:irc.freenode.netCanais:slackware‐br,sysadms,openbsd‐br,opensd‐sp