You are on page 1of 32

Seguridad en Java

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

Desconocimiento de las arquitecturas, APIS, frameworks..


Seguros.

Problemas de seguridad

Ausencia infraestructura seguridad


Errores administrador/usuario

Exploits
Programar bien !!!
entender cmo funcionan las cosas
aprender buenas polticas
aprender trampas habituales

Desbordamientos

Es extremadamente sencillo equivocarse


Mal diseo del lenguaje

Malas prcticas de programacin


Hay lenguajes inmunes, pero no siempre podremos usarlos

En C, cuidado con: strcpy, strcat,sprintf, gets, scanf

El Desbordamiento del Buffer: Buffer OverFlow


Los desbordamientos de buffer se basan en
introducir el cdigo en el espacio reservado
para las variables locales (los argumentos de
un mtodo / funcin) y despus modificar la
direccin de retorno/regreso (RET), donde
regresa la informacin, para que apunte a un
offset en donde hemos introducido nuestro
cdigo fuente.
Este cdigo puede ser - por ejemplo - una
ShellCode, : bash, sh, entre otros.

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

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 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.

Arquitectura Criptogrfica de Java (JCA) y


la Extension Criptogrfica de Java (JCE).

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

Java Cryptography Architecture (JCA)


Introduccin

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

Firma digital (DSA)


MD5 y SHA-1
Generador de Claves DSA
Certificados X.509

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

Ayuda para el cifrado simtrico


Ayuda para el cifrado asimtrico
Ayuda para el cifrado en bloque
Cifradores en flujo
Flujos seguros
Objetos sellados

JCE
API JCE

Cifrado simtrico en bloque DES, RC2 e IDEA


Cifrado simtrico en flujo RC4
Encriptacin asimtrica RSA
Comprobacin de claves

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 {

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());

Seguridad en Java

Control de acceso Granularidad


Tools (jar, keytool, jarsigner, policytool)
Modelo de Permisos
Java.security.permission

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

Extensin de Sockets Seguros de Java (JSSE)


http://java.sun.com/products/jsse/
Servicio de Autentificacin y Autorizacin de Java
(JAAS)
http://java.sun.com/products/jaas/

Seguridad en SQL

SQL Injection

Ataque contra un Gestor de Bases de Datos Relacional que


aprovecha la vulnerabilidad de una aplicacin cliente del mismo.
Dicha vulnerabilidad consiste en permitir mandar instrucciones
SQL adicionales a partir de un campo o un parmetro de entrada
- por lo que se dice han sido "inyectadas".

SQL Injection

El ataque "SQL Injection" es posible dadas ciertas caractersticas


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 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' --

'; EXEC xp_cmdshell 'net stop sqlserver', no_output

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 dinmicamente.
No utilizar cuentas con privilegios administrativos.
No proporcionar mayor informacin de la necesaria.

You might also like