Curso: (62612) Dise˜ no de aplicaciones seguras
Fernando Tricas Garc´ıa
Departamento de Inform´atica e Ingenier´ıa de Sistemas Universidad de Zaragoza
http://webdiis.unizar.es/~ftricas/
http://moodle.unizar.es/
Tema XV: Algunos lenguajes
Fernando Tricas Garc´ıa
Departamento de Inform´atica e Ingenier´ıa de Sistemas Universidad de Zaragoza
http://webdiis.unizar.es/~ftricas/
http://moodle.unizar.es/
Las plataformas y sus consecuencias
Recordatorio: elegir una tecnolog´ıa supone elegir tambi´en sus problemas asociados
I Vamos a comentar un poco sobre ello, ahora que tenemos conocimientos suficientes
Las plataformas y sus consecuencias
Recordatorio: elegir una tecnolog´ıa supone elegir tambi´en sus problemas asociados
I Vamos a comentar un poco sobre ello, ahora que tenemos conocimientos suficientes
CGI
Common Gateway Interface (CGI)
I Cualquier ejecutable puede invocarse desde el servidor web
I La entrada al programa es mediante variables de entorno, entrada est´andar y l´ınea de instrucciones
I La salida deben ser instrucciones HTTP por la salida est´andar
I Pr´acticamente ya no se usa, pero las plataformas actuales heredan algunas caracter´ısticas
CGI. Variables de entorno
Est´aticas
I GATEWAY INTERFACE (versi´on)
I SERVER SOFTWARE (programa y versi´on) Directas:
I REMOTE ADDR
I REMOTE HOST
I REMOTE IDENT
I . . .
Se traducen a variables de entorno y se transmiten a la aplicaci´on
I Las variables a may´usculas
I Se a˜nade HTTP delante
CGI. Variables
Replicadas
I Cada l´ınea HTTP que ve el servidor web puede generar una
I Algunas puede que no Sintetizadas
I Variables relativas al nombre de los objetos referenciados (que, a pesar de que originalmente ten´ıan que ver con objetos del sistema, actualmente en muchos casos no tiene por qu´e ser as´ı)
Perl
I Empez´o us´andose para programitas CGI por su flexibilidad y desarrollo r´apido de aplicaciones de procesamiento de texto Problemas de inyecci´on de SQL:
I Prevenciones habituales Acceso a ficheros
I open()
Invocaci´on de un int´erprete de instrucciones (shell)
I open(), system(), exec()
I Comillas invertidas: $fileinfo = ‘ ls -l $filename ‘ Inclusi´on de ficheros:
I require(). Tambi´en use(), do()
Perl
Evaluaci´on en l´ınea
I eval()
Cross–Site Scripting
I HTML::Entities::encode()
I URI::Escape::uri encode()
I Y algunas mas . . . Taint Mode
I Vigila variables que contienen datos provenientes del exterior
I Si el programa va a hacer algo peligroso, falla
PHP
Inyecci´on SQL
I Atenci´on!
Acceso a ficheros
I fopen(), readfile(), dir(), unlink(), file(), mkdir(), symlink(), get file contents()
$myfile = ”/usr/local/myapp/var/:”.$ GET[’filename’];
$fp = fopen($myfile, ”r”)
I Tambi´en conexiones (urls: http, ftp, . . . )
Aunque se puede desactivar con allow url fopen en el php.ini Invocaci´on int´erprete de instrucciones
I exec(), shell exec(), system(), popen(), proc open(), passthru()
PHP
Inclusi´on de ficheros
I require, include
I mejor require once() e include once() Evaluaci´on en l´ınea
I eval()
I preg replace() (con /e ) ejecuta un c´odigo determinado por cada texto que satisface la expresi´on
Cross–site scripting
I htmlspecialchars(), htmlentities(), urlencode()
PHP
Configuraci´on
I register globals: cualquier variable enviada por los usuarios se pone a disposici´on del programa (cada vez se usa menos).
Principalmente es peligroso con variables del programa que no se han inicializado
I magic quotes:
I Opci´on de configuraci´on magic quotes gpc (get, post, cookies)
I magic quotes runtime (tambi´en para otros valores generados en tiempo de ejecuci´on)
I .inc opci´on. Se trata de poner determinados ficheros de configuraci´on con esa extensi´on. Si el servidor no est´a bien configurado, puede ocurrir que la configuraci´on se muestre.
Java
Inyecci´on SQL
I Ojo!!
Acceso a ficheros
I java.io
I getRealPath(), getPathTranslated() Acceso al interprete de instrucciones
I No se usa mucho
I getRuntime() en java.lang
I Luego exec() Inclusi´on de ficheros
I RequestDispacher (para transferir el control de flujo)
Java
Inclusi´on de ficheros JSP
I < %@ include file=”include.jsp” %>
I <jsp: include page=”include.jsp” />
I <jsp: include page=’< %”browserActions/” + request .getParameter(” actionPage”) + ”.jsp” %>
Evaluaci´on ‘inline’
I Java no ejecuta el c´odigo sobre la marcha (hay compilaci´on)
I Pero hay algunos sistemas para permitir ese tipo de ejecuci´on (BeanShell, Jython y, claro, ejecuci´on de ficheros JSP).
Cross Site Scripting
I java.net.UrlEncoder.encode()
I M´etodo response.encodeURL() codifica datos para salida
I Cuidado con las etiquetas <c> (s´olo sirven las <c:out>)
Java
Problemas con la concurrencia
I Hay que tener cuidado de que los servlets sean seguros frente a la concurrencia
I Se puede hacer que sean secuenciales (SingleThereadModel)
I Cuidado con las variables globales, . . . , (o similares) Configuraci´on
I Los servlets se pueden ver como un ´arbol web virtual en web.xml en el directorio WEB-INF
I Todos los servlets que se ofrezcan ’al exterior’ son potencialmente peligrosos: los menos posibles, y en las condiciones mas exigentes posibles
ASP. Active Server Pages
Inyecci´on de SQL
I T´ıpicamente se usan lo ActiveX Data Objects (ADO)
I Connection (cuidado con Connection.Execute()
I Command (Command.Execute())
I RecordSet (el m´etodo Open ) Acceso a ficheros
I Objeto Scripting.FileSystemObject
I Y los relacionados
Acceso al int´erprete de instrucciones
I Habitualmente se hace a trav´es del objeto Windows Scripting Host (WshShell) aunque no es tan habitual como en Unix.
I M´etodos Exec(), Run() Inclusi´on de ficheros
I Habitualmente se hace mediante SSI (Server Side Includes) lo que lo inmuniza frente a algunos problemas (se procesa antes de mostrarse).
I De todas formas, cuidado con Server.Execute(),
ASP
Evaluaci´on en l´ınea
I VBScript es el lenguaje utilizado habitualmente
I Execute(), Eval(), ExecuteGlobal() Cros Site Scripting
I Server.HTMLEncode()
I Server.URLEncode() Configuraci´on
I Ficheros .inc (cuidado con que el servidor los maneje correctamente, igual que en PHP)
ASP.Net
Inyecci´on de SQL
I System.Data para interactuar con las fuentes de datos
I Cuidado con fijar los tipos de datos Acceso a ficheros
I La entrada salida se gestionan mediante System.IO
I Pero hay mas posibilidades
Invocaci´on del int´erprete de instrucciones
I Process.Start() Inclusi´on de ficheros
I Como Java, no es f´acil incluir programas din´amicamente
I <!−−#include file=”inc footer.aspx”−−>
Evaluaci´on en l´ınea
I No est´a permitida la ejecuci´on directa
I System.CodeDom.Compiler permite ejecutar para diversos
ASP.Net
Cross Site Scripting
I Server.HTMLEncode(), Server.URLEncode()
I Deniega expl´ıcitamente peticiones que contienen < y >
Configuraci´on
I web.config
I Puede ser tambi´en machine.config ViewState
I Se almacena en el cliente, mediante una cookie, con informaci´on sobre contenido de formularios, y otras informaciones
I Protegido, pero no cifrado
ASP.Net
Control de acceso
I ASP.Net permite establecer control de acceso para todo el sitio.
Autorizaci´on
I web.config permite configurar restricciones sobre m´etodos, usuarios, grupos, papeles,. . .
AppSettings
I En web.config para proporcionar par´ametros espec´ıficos para una aplicaci´on