protegendo sites php no seu servidor web

Post on 24-May-2015

2.720 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

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

CláudioBorgescborges@openbsd‐sp.org

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.

OPorquedasegurança

  Falhaspodemexistiremqualquersistema.  Programasinsegurospodemserfeitosem

qualquerlinguagem.  Protegerasaplicaçõeswebétarefatantodo

administradorquandodoprogramador.  Muitasfeaturesajudamnaprogramaçãomas

diminuemasegurança.  Porserumalinguagemmuitorica,muitos

programadoresnãoconsideramqueasegurançatambémdependedaqualidadedoseucódigoPHP.

Diretivasperigosas

  allow_url_fopen–Permiteutilizararquivosexternoscomosefossemarquivoslocais.

  allow_url_include–Permiteutilizararquivosexternoseminclude/require.

  expose_php–Adicionaumaassinaturanoheaderdoseuservidorweb,informandoqueophpestáinstalado.

  Exemplodeusodesitemaldesenvolvidoeallow_url_fopen/allow_url_includehabilitado:

  Agoradesabilitado:

  Exemplodescanemservidorcomexpose_phphabilitado:

  Ecomeledesabilitado:

Funçõesperigosas

  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.

Configurandooopen_basediredisable_functions

  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

  Exemplodeumapáginasemopen_basedirconfigurado:

  Outroexemplo:crieiumarquivochamadoreadfile.phpcomoseguinteconteúdo:

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

  Eoresultado:

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

  Ecomocódigodoreadfile.php:

Apolêmicadoregister_globals

  Comregister_globalshabilitado,sãocriadasvariáveislocaiscomonomeequivalenteàsdaEGPCS.

  Épossívelutilizarregister_globalshabilitadoeterminhaaplicaçãosegura?

  Porquetantosprogramadoresinsistememhabilitarregister_globals?

  Porquenãoutilizarregister_globals?

Exemplosdeusoderegister_globals

  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

  Eagoradaformacorreta:

if (authenticated_user())

$_SESSION[‘auth’] = true;

if ($_SESSION[‘auth’])

echo “Usuário autorizado…”;

else

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

Utilizandoasdiretivasphp_flagphp_value

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

  Asdiretivasphp_admin_flagephp_admin_valuesópodemserutilizadasemarquivosdeconfiguraçãodoApacheenãopodemsersobrescritaspordiretivas.htaccess.

  Exemplodeusodadiretivaphp_admin_value:

Mod_security

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

  Existemarquivosderegrasdisponíveisparadownload.

  Vocêmesmopodecriarsuasregras.  Épossívelcriarwhitelists.

Suhoshin

  UmpatchparaoPHPquepodeserutilizadocomoestensão.

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

Cuidadoscomlogseexibiçãodeerrosemambientede

produção

  Gravarlogsdeerroséútilparadebugarproblemas.

  Ousuárionãodeveteracessoatodasasinformaçõesdeerro.

  Exibirerrosemambientedeproduçãopodefornecerinformaçõessobresistemaeservidor.

Opçõesdeerroselogsnophp.ini

  error_reporting–Definequaisníveisdeerrosserãoreportados.

  display_errors–Determinaseoserrosdevemserexibidoscomopartedasaídaounão.

  log_errors–Defineseoserrosserãogravadosemarquivoounão.

  error_log–Defineemqualarquivooserrosserãogravados.Necessitaqueolog_errorsestejaativado.

Programandocomsegurança

  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.

Referências

  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

Perguntas?

cborges@openbsd‐sp.org

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

top related