La tecnología de seguridad Java incluye un gran conjunto de herramientas, APIs, protocolos y mecanismos de seguridad. Incluyen criptografía, infraestructura de clave pública, comunicación, autenticación y control de acceso. Tanta es la riqueza que describir el uso de cada una de ellas haría que el artículo fuera más extenso.
Cualquier fraude que resulte en pérdida de datos personales (dirección, contraseñas, información bancaria y otros) es un problema serio de seguridad de aplicaciones.
El acceso no autorizado a información personal confidencial y restringida a personas tiene la intención de perjudicar o enriquecer a alguna de las partes.
Discutir sobre este asunto es importante para reflexionar sobre cuestiones de las que solo tomamos conocimiento cuando se abordan en los medios (televisión y periódicos) y de las que nos preocupamos después de que el hecho ha sucedido.
¿Por qué necesito preocuparme por aplicaciones seguras?
Algunos de los motivos para preocuparse por la seguridad de aplicaciones Web:
• El 75% de los ataques ocurren en la capa de aplicación (Gartner)
• El 90% de los sitios web están vulnerables a ataques (Watchfire)
• El 80% de las organizaciones experimentará un incidente de seguridad (Gartner)
• Los datos de clientes, tarjetas y otros pueden ser obtenidos en algunos ataques
• Robo de identidad
• Violación de privacidad
• Su empresa y su cliente pueden sufrir un desgaste de imagen y un alto perjuicio financiero
Muchas veces, las aplicaciones permiten ataques debido a la falta de conocimiento y al mal uso de la tecnología en el desarrollo del software. Incluso con la existencia de un firewall, es necesario que los desarrolladores de TI se preocupen por los detalles de seguridad para no permitir este tipo de fallas.
Seguridad Java y vulnerabilidades en aplicaciones Web:
1. Cross-Site Scripting (XSS)
2. Vulnerabilidades de inyección (Injection Flaws)
3. Referencia directa a objetos inseguros (Insecure Direct Object Reference)
4. Ejecución de archivos maliciosos (Malicious File Execution)
5. Falsificación de peticiones en sitios cruzados (CSRF)
6. Almacenamiento criptográfico inseguro
7. Comunicación insegura
8. Tratamiento de errores inadecuado
9. Fallas de restricción de acceso a URLs.
No es tan poco común como parece encontrar aplicaciones con fallas básicas de seguridad, como el almacenamiento de contraseñas en bases de datos sin criptografía. Aunque sea de conocimiento general que ningúnsistema sea 100% seguro, es posible minimizar los riesgos y aumentar el nivel de seguridad en las aplicaciones Java.
Para alegría de los desarrolladores que trabajan con el lenguaje de Oracle, existe un gran número de herramientas y APIs, lo que disminuye considerablemente el número de ataques cuando se utilizan correctamente.
Las herramientas y bibliotecas pueden dificultar el acceso de un posible atacante
Funcionalidad: Plataforma
Objetivo: Construir funcionalidad de seguridad en el lenguaje, en el compilador y en la máquina virtual (tipado de datos fuerte, gestión automática de memoria, verificación del bytecode)
Beneficio: Proporciona una plataforma confiable y segura para desarrollar y ejecutar aplicaciones.
API/Herramienta: La especificación del lenguaje Java
Funcionalidad: Criptografía
Objetivo: Soporte a los algoritmos estándar, incluidos RSA, DSA, AES, Triple DES, SHA, PKCS#5, RC2 y RC4. Soporte para el token PKCS#11
Beneficio: Implementación de algoritmos independientes
API/Herramienta: JCA y JCE
Funcionalidad: Autenticación y control de acceso
Objetivo: Abstrae APIs de autenticación que pueden incorporarse en mecanismos de «login» en una arquitectura «pluggable». Una API de políticas y permisos que permite al desarrollador crear y al administrador gestionar el acceso a la aplicación.
Beneficio: Permite autenticación single sign-on
API/Herramienta: Java Security Architecture, Java Authentication and Authorization Service (JAAS), Policy Implementation and Syntax y Signature Timestamp Support
La autenticación es el proceso para determinar la identidad del usuario. En Java, podemos realizar este proceso mediante la configuración del servidor de aplicaciones.

En la Figura 1 podemos observar el proceso de autenticación de usuario por contraseña; sin embargo, solo el «login» en la aplicación no es suficiente para garantizar el nivel de seguridad.
El acceso a cada página o URL de la aplicación debe contener un perfil asociado, el cual tendrá o no permiso para acceder a ella.
Otro punto: verificar siempre si la sesión iniciada en el «login» de la aplicación sigue siendo válida. Definir un tiempo máximo para invalidar la sesión es un proceso importante, ya que el usuario puede dejar la aplicación en ejecución sin realizar ninguna operación. Cuando transcurra ese tiempo, definido en la configuración de la aplicación, el usuario deberá ser obligado automáticamente a realizar el «login» nuevamente.
Invalidar la sesión en el momento de realizar un «logout» en la aplicación es obligatorio, además de beneficiar al servidor de aplicaciones al realizar una limpieza de los objetos que estaban almacenados en la sesión del usuario.
Funcionalidad: Seguridad de comunicación
Objetivo: APIs e implementaciones para los siguientes estándares de protocolos de comunicación de seguridad: TLS, SSL, Kerberos y SASL. También se incluye soporte completo para HTTPS sobre SSL/TLS.
Beneficio: Autentica puntos sobre redes inseguras y protege la integridad de los datos transmitidos
API/Herramienta: JSSE, Java GSS-API y Java SASL APIFuncionalidad: Clave pública (PKI)
Objetivo: Herramienta para gestionar certificados y claves, con soporte para los siguientes algoritmos y estándares (CRLs) X.509, PKIX, OCSP, PKCS#11, PKCS#12, LDAP y java.util.Collection
Beneficio: Simplifica la complejidad del desarrollo de PKI.
API/Herramienta: X.509, Java CertPath API, On-Line Certificate Status Protocol y Java PKCS#11
Escribir aplicaciones utilizando seguridad permite al desarrollador implementar sistemas más seguros, así como a los administradores gestionarlos, restringiendo accesos y autorizaciones al sistema.
Tomando en consideración estos aspectos discutidos en el artículo, es inevitable la entrega y el uso de una aplicación mucho más segura.
Pregúntese:
- ¿A qué cliente le gustaría que su información bancaria, número de identificación o dirección fueran conocidos por personas no autorizadas?
- El sitio web en el que realiza compras en línea, ¿almacena la información de su tarjeta de crédito?
- ¿Quién garantiza que esa información no esté cifrada?
- ¿Acaso un empleado de la empresa sin buenas intenciones no podría utilizar su tarjeta para realizar una compra?
Para recibir más contenidos como este, suscríbase a nuestro boletín:
