Seguridad Php

download

of 7

  • date post

    29-Oct-2015
  • Category

    Documents

  • view

    20
  • download

    3

Embed Size (px)

Transcript of Seguridad Php

  • 68

    Sin embargo, este mtodo tienealgunos inconvenientes. Los ficheroscreados por PHP en tiempo de ejecucin- imgenes subidas, ficheros cach osimplemente ficheros de un libro de visi-tas - normalmente tienen el ID delusuario del servidor Web, a pesar de queel script PHP tenga el ID del usuario quelo subi va FTP. En este caso,safe_mode ocasionara problemas deaccesos.

    La comprobacin de los permisos delos ficheros es tan slo un pequeopaso hacia la seguridad, pero tienepoca utilidad por s misma. Elparmetro no hace honor a su presun-tuoso nombre. Adems, existen proble-mas con la implementacin a vecesPHP no realiza comprobacionessafe_mode correctamente. La ventaja,en realidad, puede llegar a ser unadesventaja, ya que los administradorespueden pensar que estn a salvo [4] yno tomar ninguna otra medida deseguridad.

    open_basedir proporciona ms protec-cin con menos elementos. Incluso sisafe_mode funciona, an se debera con-

    de la base de datos y otros ficheros coninformacin interna. La Figura 2 muestraun posible listado.

    La documentacin de PHP en [1] tieneejemplos de parmetros y funciones, ascomo algunos captulos sobre seguridad[2]. El antiguo pero interesante HOWTOsobre instalacin de un servidor webseguro de Marc Heuse en [3] tambinproporciona una buena visin.

    Seguridad RelativaSi esta es la primera vez que se interesapor la seguridad en PHP, probablementese haya dado cuenta de que en el ficherophp.ini hay un parmetro, cuyo nombresuena bastante prometedor, safe_mode.Esta opcin le indica a PHP que realiceunas comprobaciones adicionales deseguridad. Entre otras cosas, en el accesoa los ficheros, el intrprete comprueba siel ID del usuario para el fichero es elmismo que el ID del usuario para elscript invocado. Esto es un intento porparte de PHP para impedir que los usua-rios lean ficheros que no les pertenezca,aunque el sistema de ficheros les de per-miso para leerlos.

    La mayora de los proveedores Webpermiten en la actualidad la ejecu-cin de scripts PHP. Los usuarios

    pueden ejecutar sus propias aplicacionesde servidor en el servidor - y exponerseellos mismos a un riesgo mucho mayordel que puedan suponer. Sin embargo,PHP implica menos exposicin al riesgoque los scripts CGI.

    AgujeroEl Listado 1 muestra un administrador deficheros que podemos usar para compro-bar el espacio web a asegurar. Despus desubir el administrador de ficheros al sitioweb, podemos usarlo para tener un accesofcil al disco duro, incluido el nivel raz, siel intrprete de PHP nos permite llegarhasta ah. Como el intrprete se ejecuta enel mismo contexto que el servidor webApache, podramos tener acceso a/etc/passwd y los directorios webs de otrosusuarios, incluido los ficheros ./htpasswdalmacenados en esos directorios.

    El directorio /tmp es tambin intere-sante ya que a menudo contiene ficherosque el administrador ha olvidado, comolistados de ficheros o usuarios, volcados

    Permitir que los usuarios instalen scripts PHP de forma arbitraria puede poner en peligro la seguridad del

    servidor web. Un pequeo error es todo lo que se necesita para que un atacante tenga acceso a los ficheros

    del sistema o la shell. Pero los administradores tienen una lnea final de proteccin la cual utiliza las opciones

    de PHP para minimizar el riesgo. POR PEER HEINLEIN

    AIRBAG PARASERVIDORES WEBS

    ADMINISTRACIN Seguridad PHP

    68 W W W . L I N U X - M A G A Z I N E . E S

    original photo: ww

    w.sxc.hu

    Nmero 05

    PHP Seguro en entornos multiusuarios

    AIRBAG PARASERVIDORES WEBS

    068-074_Webairbag_Linuxt5 20.04.2005 13:00 Uhr Pgina 68

  • siderar open_basedir como una precau-cin extra.

    Open_basedir - Caballero de ArmaduraResplandeciente?open_basedir permite a los admi-nistradores definir una o ms rutas. A los

    scripts PHP tan slo se les permiteacceder a ficheros en estos directorios(Figura 3). Suponiendo que php.initenga la entrada open_basedir =/srv/www/htdocs, PHP devolver unerror ante cualquier intento por accedera un fichero que est fuera de este direc-torio.

    Esta restriccin al $HTDOCROOT deApache impide el acceso al discoentero, sin embargo, los usuarios delservidor web an pueden leer y escribiren los directorios de los dems usua-rios, a menos que los permisos de losficheros UNIX impidan que lo hagan. Elnavegador de ficheros del Listado 1

    69W W W . L I N U X - M A G A Z I N E . E S

    Seguridad PHP ADMINISTRACIN

    69Nmero 05

    Figura 2: Un script de PHP accede libremente a un servidor inseguro. El sencillo gestor de

    ficheros en PHP del Listado 1 es todo lo que necesitamos para darnos un paseo por el disco.

    Figura 3: open_basedir permite a los admi-

    nistradores restringir los scripts PHP a los

    ficheros del espacio reservado del servidor.

    La zona del sistema de ficheros a la que el

    servidor virtual tiene acceso aparece

    resaltada en otro color.

    Un programa CGI se ejecuta en el servi-dor como un proceso independiente.Un proceso CGI con los privilegios deaccesos necesarios tiene las mismascapacidades que un proceso deusuario, incluyendo acceso al hardwarey al sistema de ficheros e inclusoacceso a las variables del sistema, lalista de procesos, la lista de usuarios ya muchas otras cosas ms. Hay quepoder confiar en sus usuarios para per-mitirles que ejecuten sus propias CGIs(Figura 1). Por el contrario, los scriptsPHP se ejecutan en una caja de arenaproporcionada por el intrprete de PHPcomo un componente del servicioApache.

    Los entornos Linux se configuran tpi-camente para operaciones multiusua-rios seguras, pero hay que distinguirentre los agujeros de seguridad que sepuedan explotar localmente de los quese puedan explotar remotamente. Unatacante local puede ocasionar muchoms dao de lo que lo pueda hacer unoremoto y un script CGI expone al sis-tema a los mismos riesgos que unsaboteador local.

    Adems, es mucho ms difcil conseguirlos permisos de los ficheros en un servi-dor web que en una aplicacin deescritorio. Hay que asignar al menos per-misos de lectura tanto al ID del usuariodel servidor web como al usuario quecrea las pginas de cualquier fichero quese publique en la web. Pero en unentorno multiusuario, incluso un simpleacceso de lectura de esta clase puede serun problema, si se necesita evitar quelos usuarios externos lean las con-traseas de las bases de datos. Si hayque asignar permisos de escritura parasu espacio web, por ejemplo, para los

    libros de visita o galeras de imgenes,algunos HOWTO recomiendan chmod777 - es casi un suicidio, que completa-mente abre los directorios y que por des-gracia ha sucedido anteriormente enalgunos servidores.

    Manteniendo los Usuarios Aparte

    Es ms o menos imposible mantener alos usuarios separados de manera queno puedan acceder a los datos de susvecinos usando la configuracin de CGIpor defecto. Con algo de esfuerzo adi-cional, los administradores pueden almenos impedir que los servidores FTPpermitan chmod 777. Y las envolturasque proporcionan Apache para las CGIsfacilitan una capa ms de seguridad,asegurndose de que los programas CGIse ejecutan con el ID del usuario pro-pietario, en vez de con los privilegios delservidor Apache. Los administradoresdisponen de muchas ms opciones conPHP. La opcin open_basedir que hemosestado viendo en este artculo le indica alintrprete de PHP que compruebe si elscript tiene permiso para acceder aldirectorio especificado adems de com-probar los permisos del fichero.

    CGI y PHP

    Figura 1: En contraste, los scripts PHP se

    ejecutan en una caja de arena proporcionada

    por el intrprete de PHP, como un compo-

    nente del servicio Apache.

    068-074_Webairbag_Linuxt5 20.04.2005 13:00 Uhr Pgina 69

  • otros usuarios, como se muestra en laFigura 4.

    Apache vs. PHPLa lnea 10 de nuestro ejemplo permite elacceso al directorio /usr/share/php ademsde las carpetas en el dominio/srv/www/htdocs/www.example.com. Eldirectorio contiene las bibliotecas comunesde PHP y los paquetes PEAR (PHP Exten-sion and Application Repository).

    Por defecto, upload_tmp_dir apunta aldirectorio /tmp, que proporciona accesoglobal de escritura. Esto no es una con-figuracin para un entorno seguro. Esimportante que se asigne un directorio

    temporal a cada dominio (lnea 12) yque se guarde la informacin de cadasesin de forma individual para cadadominio (lnea 13).

    Como la configuracin paraupload_tmp_dir especifica un directoriobajo srv/www/htdocs/www.example.com,el script PHP tiene acceso a pesar de lasrestricciones de open_basedir. Si esto nofuera as, la lnea 10 tambin necesitaraincluir la ruta al directorio.

    Validacin de EntradaLos administradores a menudo subesti-man el riesgo que una configuracininsegura lleva asociada y de la clase de

    sera capaz de producir el resultado dela Figura 2.

    La manera de manejar esta situacines crear un open_basedir para cadadominio albergado, o usuario, pararestringir el acceso a un directorionico. Afortunadamente, PHP puedeusar el parmetro php_admin_value enla definicin del host virtual de Apachepara imponer las restricciones nece-sarias (Listado 2). Para poner variosdirectorios, hay que separarlos por pun-tos y comas. Despus de aplicar elnuevo nivel de seguridad y rearrancar elservidor web Apache, el servidor dene-gar el acceso a los directorios de los

    ADMINISTRACIN Seguridad PHP

    70 Nmero 05 W W W . L I N U X - M A G A Z I N E . E S

    01 03 04 Filebrowser v1.0 -- Peer Heinlein05 06 07 70 71 Directory?72 73 74 75 76 79 80

    Listado 1: Administrador de Ficheros

    068-074_Webairbag_Linuxt5 20.04.2005 13:00 Uhr Pgina 70

  • usuarios de la que tienen que protegerse.En algunos casos, los atacantes remotospueden subir sus propios cdigos PHP alservidor y ejecutarlos, sin la necesidadde acceder por FTP al espacio web. Elpeligro real no es una cuestin de confiaren los usua