Professional Documents
Culture Documents
Ideas Previas
La Seguridad es una medida NO un caracterstica
Costo
Usabilidad
Parte de un diseo
Problemas?
No hay conciencia y las estadsticas de incidentes no
mejoran!!!
Falta de competencias
El problema es del Admor Red / Oficial de Seguridad
Informtico
Problemas de seguridad
Exploits
Programar bien !!!
entender cmo funcionan las cosas
aprender buenas polticas
aprender trampas habituales
Desbordamientos
Seguridad en Java
Seguridad General
Arquitectura de la Seguridad
Arquitectura de la Criptografa
Poltica de permisos
API para bloqueos de privilegios
Certificados X.509 y listas de certificados revocados
Seguridad en Java
JVM
Seguridad en Java
1.El cargador de clases (Class Loader), que determina como y cuando pueden
cargar cdigo 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
cdigo 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 parmetos
de tipos correctos.
3.El gestor de seguridad (Security Manager), que controla el acceso a los
recursos en tiempo de ejecucin. Los recursos sobre los que tiene control son
multiples: E/S de red y ficheros, creacin de cargadores de clases,
manipulacin de hilos de ejecucin, ejecucin de programas externos (del SO),
detener la JVM, cargar cdigo nativo en la mquina virtual, realizar
determinadas operaciones en el entorno de ventanas o cargar ciertos tipos de
clases.
Seguridad en Java
Arquitectura criptogrfica
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
gestin de permisos.
2.Clases relacionadas con la Criptografa.
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)
Arquitectura de la Criptografa
JDK 1.1
Resmenes de mensajes
Firmas digitales
Java 2 SDK
resmenes de mensajes
X.509
Arquitectura para grano fino, flexible, extensible y control de
acceso altamente configurable.
Arquitectura de la Criptografa
Proveedores de servicios criptogrficos
KeyStore
JCE
Java Cryptography Extension (JCE)
Introduccin
Marco de trabajo y de implementacin para el cifrado.
Generacin y comprobacin de claves
Algoritmos de autenticacin de mensajes (MAC)
JCE
Introduccin
JCE
API JCE
JCE
API JCE
Cifrado Password-Based(PBE)
Algoritmo de autentificacin de claves (MAC)
Proveedor de Servicios SunJCE
Una implementacin del DES (FIPS PUB 46-1), Triple DES, y
algoritmos de encriptacin 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 pblicos y privados convenientes para el
algoritmo de Diffie-Hellman.
JCE
Proveedor de Servicios SunJCE
Una implementacin de HMAC-MD5 y algoritmos keyedhashing HMAC-SHA1 definido en RFC 2104.
Una implementacin del esquema de relleno descrito en
PKCS #5.
Una implementacin del keystore para el tipo propietario
del keystore llamando "JCEKS".
Ejemplos
HMAC-MD5
import java.security.*;
import javax.crypto.*;
public class initMac {
Seguridad en Java
Polticas de Seguridad
PolicyTool
Gestor de Seguridad: java.security.manager
Seguridad en Java
El paquete java.security
El paquete java.security consiste bsicamente 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 pblicas 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
("DSA");
kpg
KeyPairGenerator.getInstance
Seguridad en Java
El paquete java.security.cert
Aade soporte para generar y usar certificados, incluye clases e
interfaces especficas para soportar certificados X.509.
CertificateFactory. Se emplea para generar certificados y
listas de revocacin (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 revocacin de certificados.
X509Certificate.
Clase
abstracta
para
representar
certificados X.509.
X509CRL. Clase abstracta para una lista de revocacin de
certificados X.509.
X509CRLEntry. Es una clase abstracta para las entradas de
las listas de revocacin
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
Seguridad en Java
Seguridad en SQL
SQL Injection
SQL Injection
SQL Injection
Una aplicacin de acceso a datos que emplea entradas de
usuario como parmetros de una consulta SQL comn. Es
tpico que este tipo de consultas sean construidas
dinmicamente utilizando sentencias SQL con concatenacin
de variables, al estilo:
"SELECT campo1, campo2,..., campoN FROM tablaX
WHERE campo1=" + mValor [+ ...]
SQL Injection
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:
a) ' Or 1=1 -b) 0 Or 1=1 -c) #01/01/01# Or 1=1 -"SELECT campo1, campo2,..., campoN FROM tablaX
WHERE campo1='' Or 1=1 -- lo que siga no importa"
SQL Injection
Lo que se consigue es de hacer vlida la consulta al aadir una
clausula OR que siempre ser cierta (1=1) as como de obligar al
intrprete SQL a omitir el resto de la sentencia SQL original al
introducir el guin doble (--) que le indica que lo subsiguiente es
un comentario.
El atacante puede, por ejemplo, tener acceso a la aplicacin sin
necesidad de contar con las credenciales adecuadas.
' UNION SELECT id, name, '', 0,'' FROM sysobjects
WHERE xtype='U' --