Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Criptografía y seguridad# Ingeniería del software

Fortaleciendo la seguridad de aplicaciones Java contra amenazas de la cadena de suministro

Un sistema para prevenir ataques en aplicaciones Java usando una lista de clases permitidas.

― 5 minilectura


Sistema de seguridad deSistema de seguridad deJava contra ataquesJava.cadena de suministro en aplicacionesNuevo sistema previene ataques a la
Tabla de contenidos

La cadena de suministro de software es esencial para desarrollar aplicaciones hoy en día, pero también trae riesgos. Muchos desarrolladores utilizan bibliotecas de terceros para su software, lo que puede causar problemas de seguridad. Si estas bibliotecas tienen fallas, los atacantes pueden explotarlas. Un ataque notorio se llama Log4Shell, que permitió que código de una fuente maliciosa se ejecutara en el servidor. Este documento habla de un nuevo sistema que ayuda a prevenir tales ataques en aplicaciones Java.

El Problema

A medida que el desarrollo de software ha crecido, la dependencia del código externo ha aumentado. Esto introduce vulnerabilidades, especialmente cuando se ejecuta código no verificado. Muchos ataques recientes han apuntado a esta debilidad, explotando fallas en bibliotecas populares para ejecutar comandos dañinos de forma remota. Los métodos de seguridad tradicionales pueden detectar estos problemas durante el desarrollo, pero a menudo fallan en proteger contra amenazas durante la ejecución.

La Solución

Nuestro sistema propuesto crea una lista de permitidos de clases que pueden ejecutarse en una aplicación Java. Esta lista se genera basada en la cadena de suministro del software de la aplicación. Al asegurarse de que solo se ejecuten clases de confianza, el sistema puede bloquear cualquier clase no reconocida o modificada durante la ejecución.

Cómo Funciona el Sistema

Creación de la Lista de Permitidos

Durante la fase de construcción de una aplicación, el sistema escanea todas las clases, creando una lista conocida como el Índice de Materiales (BOMI). Esta lista incluye clases de las bibliotecas centrales de Java, clases escritas por desarrolladores y cualquier clase generada dinámicamente.

  1. Clases del Entorno: Estas son clases integradas de Java. El sistema registra los checksums para estas clases, que sirven como identificadores únicos.

  2. Clases de la Cadena de Suministro: Estas clases provienen de bibliotecas de terceros. El sistema hace un inventario de todas las bibliotecas y sus clases para crear una lista completa.

  3. Clases Dinámicas: Java permite la generación de clases mientras la aplicación está en ejecución. El sistema monitorea la aplicación durante las pruebas para registrar cualquier clase creada dinámicamente.

Monitoreo en Tiempo de Ejecución

Una vez que se crea el BOMI, se puede monitorear la aplicación durante su ejecución. Se activa un componente llamado el Vigilante de Tiempo de Ejecución de SBOM. Este verifica cada clase que se carga contra el BOMI.

  • Si la clase está en el BOMI y coincide con el checksum, se permite su ejecución.
  • Si la clase no se encuentra o si el checksum no coincide, la aplicación se termina de inmediato. Esto previene la ejecución de cualquier código potencialmente dañino.

Por Qué Es Importante

Este sistema aborda directamente un problema crítico: la capacidad de ejecutar clases desconocidas. Al mantener una lista de permitidos estricta y monitorear la carga de clases, el sistema puede minimizar eficazmente el riesgo que presenta las características de carga dinámica de clases en Java.

Pruebas del Sistema

Para validar la efectividad de nuestro sistema, lo probamos contra tres vulnerabilidades significativas comúnmente conocidas en el panorama de seguridad.

  1. Log4j: La vulnerabilidad Log4Shell mostró cómo los atacantes podían ejecutar código malicioso a través de una biblioteca de registro. Nuestro sistema evitó exitosamente la ejecución de este código malicioso al compararlo con el BOMI.

  2. Base de Datos H2: Este motor de base de datos también era vulnerable a ataques similares. Replicamos las condiciones para un posible exploit y nuevamente encontramos que nuestro sistema detuvo cualquier código dañino de ejecutarse.

  3. Configuración de Apache Commons: Usando el motor de JavaScript Nashorn, que venía incluido con Java, esta vulnerabilidad demostró cómo el código JavaScript podía causar problemas de seguridad graves. Nuestro sistema interceptó efectivamente el código malicioso antes de que pudiera ejecutarse.

Aplicabilidad en el Mundo Real

También evaluamos nuestro sistema en aplicaciones del mundo real para medir su impacto y rendimiento. Probamos su compatibilidad con software existente, buscando asegurar que no interfiera con operaciones legítimas.

  1. PDFBox: Esta aplicación manipula archivos PDF y se probó bajo una carga de trabajo que involucraba varias operaciones con PDF. Nuestro sistema funcionó sin falsos positivos, identificando y permitiendo operaciones legítimas.

  2. Ttorrent: Se evaluó una aplicación de descarga peer-to-peer, gestionando exitosamente la generación dinámica de clases sin interrupciones.

  3. GraphHopper: Esta aplicación de enrutamiento fue más desafiante, revelando que algunas clases generadas dinámicamente no podían ser capturadas debido a su naturaleza aleatoria. Aun así, el sistema logró bloquear efectivamente el código no autorizado.

Consideraciones de Rendimiento

Un aspecto clave de cualquier sistema de seguridad es su impacto en el rendimiento. Medimos la sobrecarga introducida por nuestro sistema durante las operaciones:

  • Durante el inicio inicial y la verificación de clases, hay una sobrecarga notable debido a los procesos de checksumming y verificación.
  • Sin embargo, después de la fase inicial, el impacto en el rendimiento se vuelve mínimo, lo que lo hace adecuado para aplicaciones de larga duración.

Conclusión

La integración de nuestro sistema en aplicaciones Java mejora significativamente la seguridad contra ataques de cadena de suministro que explotan la ejecución de código dinámico. Al crear un BOMI detallado y monitorear activamente la carga de clases, podemos asegurar eficazmente la integridad de las aplicaciones Java en un complejo panorama de software.

Direcciones Futuras

Mirando hacia adelante, buscamos expandir las capacidades de nuestro sistema, enfocándonos en la detección de clases ocultas que las metodologías actuales pueden pasar por alto. También planeamos explorar comparaciones con otras tecnologías que abordan preocupaciones de seguridad similares. En general, nuestro enfoque establece una base sólida para mejorar la seguridad del software contra amenazas en evolución.

Fuente original

Título: SBOM.EXE: Countering Dynamic Code Injection based on Software Bill of Materials in Java

Resumen: Software supply chain attacks have become a significant threat as software development increasingly relies on contributions from multiple, often unverified sources. The code from unverified sources does not pose a threat until it is executed. Log4Shell is a recent example of a supply chain attack that processed a malicious input at runtime, leading to remote code execution. It exploited the dynamic class loading facilities of Java to compromise the runtime integrity of the application. Traditional safeguards can mitigate supply chain attacks at build time, but they have limitations in mitigating runtime threats posed by dynamically loaded malicious classes. This calls for a system that can detect these malicious classes and prevent their execution at runtime. This paper introduces SBOM.EXE, a proactive system designed to safeguard Java applications against such threats. SBOM.EXE constructs a comprehensive allowlist of permissible classes based on the complete software supply chain of the application. This allowlist is enforced at runtime, blocking any unrecognized or tampered classes from executing. We assess SBOM.EXE's effectiveness by mitigating 3 critical CVEs based on the above threat. We run our tool with 3 open-source Java applications and report that our tool is compatible with real-world applications with minimal performance overhead. Our findings demonstrate that SBOM.EXE can effectively maintain runtime integrity with minimal performance impact, offering a novel approach to fortifying Java applications against dynamic classloading attacks.

Autores: Aman Sharma, Martin Wittlinger, Benoit Baudry, Martin Monperrus

Última actualización: 2024-06-28 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2407.00246

Fuente PDF: https://arxiv.org/pdf/2407.00246

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Más de autores

Artículos similares