TL;DR: Presentamos INDICT, un novedoso marco que dota a los Grandes Modelos de Lenguaje (LLMs) de Diálogos Internos de Críticas para la guía tanto de la seguridad como de la utilidad. El diálogo interno es un sistema cooperativo dual entre un crítico orientado a la seguridad y un crítico orientado a la utilidad, cada uno equipado con conocimientos relevantes de herramientas externas.
Los llms están sujetos a generar código inseguro o perjudicial
![](https://media.tenor.com/TRbvvfLtgXAAAAAC/internet-web.gif)
Desde el dominio del lenguaje natural, los Modelos de Lenguaje Grande (LLM) han mostrado un gran potencial en tareas de generación de código. Sin embargo, cuando se les asignan tareas que contienen intenciones maliciosas o requisitos ambiguos, los LLMs están sujetos a generar código que podría facilitar ataques dañinos o código que contiene oscuros problemas de seguridad. Nótese que el código en sí no suele ser malicioso. Por ejemplo, como se señala en trabajos relacionados, un programa para un método de cifrado podría ser muy útil para crear un sistema de archivos personal seguro, pero también podría aprovecharse para un ataque de ransomware. Por lo tanto, es importante desarrollar un método eficiente para que los LLM logren el intrincado equilibrio entre utilidad y seguridad en el dominio del código.
Investigaciones recientes en el ámbito de la PNL abordan los problemas de seguridad de los LLM mediante el ajuste fino con datos de preferencias y, potencialmente, con la optimización de recompensas basada en la RL. Sin embargo, estos métodos son bastante costosos en el dominio del código, lo que requiere expertos en programación con experiencia en ciberseguridad para crear conjuntos de datos a gran escala y de alta calidad. En este blog, presentamos INDICT, un nuevo enfoque para mejorar eficientemente los LLM generando un código de salida más seguro y útil. Vea a continuación un ejemplo.
INDICT (Diálogos Internos de Críticas) permite que dos críticas diferentes interactúen entre sí de forma autónoma y colaborativa, mejorando la generación de código tanto por seguridad como por utilidad. En este ejemplo, INDICT resuelve de forma iterativa la debilidad de seguridad CWE-78 (Neutralización incorrecta en un comando del SO) y mejora la funcionalidad del código con módulos de soporte relevantes.
INDICT: Diálogos Internos de Críticas para la Generación de Código
INDICT es esencialmente un marco multi-agente, incluyendo un LLM actor para la generación de código y dos LLMs críticos para dar feedback al actor. El objetivo del marco es mejorar los LLMs en tareas de generación de código con mejores cualidades de seguridad y utilidad en los resultados de la generación. Hay tres propiedades importantes de INDICT como sigue:
Críticas de utilidad y seguridad
💡
En primer lugar, consideramos tanto la crítica de utilidad como la crítica de seguridad y las situamos en un sistema de agentes autónomos. En lugar de activar estos críticos de forma independiente, proponemos que los agentes interactúen entre sí en una configuración de diálogo para optimizar de forma colaborativa y simultánea las respuestas generadas. Nuestros experimentos demuestran que este esquema de interacción puede crear una retroalimentación crítica más útil y sofisticada para el actor, con un enfoque equilibrado tanto en la seguridad como en la utilidad. Esta retroalimentación, posteriormente, conduce a salidas de generación más seguras y útiles.
Críticos fundamentados en herramientas externas
💡
Dependiendo de lo bien que los LLMs puedan percibir y resurgir el conocimiento relevante de los datos de preentrenamiento, estos modelos podrían causar serios problemas de alucinación generando respuestas incorrectas. Proponemos abordar este problema en los agentes críticos equipándolos con las herramientas externas adecuadas para generar respuestas críticas más fiables. En concreto, dejamos que los críticos generen nuevas consultas, consistentes en un fragmento de código y una consulta de texto, para llamar a herramientas relevantes como buscadores web e intérpretes de código. A continuación, los críticos utilizan los resultados de las herramientas para generar críticas más fundamentadas en el conocimiento.
Comentarios preventivos y post-hoc
💡
A diferencia del dominio del texto, los resultados de la generación de código podrían ser observados/interpretados adicionalmente en entornos de codificación a través de un ejecutor de código como un compilador de Python. El ejecutor de código proporciona más observaciones post-hoc, que luego pueden ser utilizadas por los críticos para una retroalimentación más informativa. En INDICT, ofrecemos dos tipos de retroalimentación: (1) retroalimentación crítica preventiva que se obtiene durante la etapa inicial de generación de código; y (2) retroalimentación crítica post-hoc que se activa después de observar el código en un entorno de ejecución. Nuestra estrategia facilita un marco de crítica más holístico para reducir el daño potencial del código de salida inseguro/malicioso en el entorno de codificación.
Utilizamos INDICT para aumentar la seguridad y utilidad de las salidas LLM en tareas de codificación
Realizamos una evaluación exhaustiva de INDICT en 8 tareas diversas a través de 8 lenguajes de programación de 5 puntos de referencia. Aunque la evaluación de cualidades como la utilidad y la seguridad sigue siendo una cuestión abierta, adoptamos estrategias de evaluación similares, en la medida de lo posible, de trabajos anteriores relacionados. En concreto, utilizamos una mezcla de herramientas de análisis estático (por ejemplo, [1]) para buscar problemas de seguridad y vulnerabilidad en el código generado y una evaluación basada en IA (por ejemplo, [2]) para determinar la utilidad y malicia de los resultados del modelo. Véase más abajo para más detalles de los resultados experimentales.
Una observación común es que los modelos más potentes (por tamaño o aquellos con ajuste adicional de datos) son generalmente más útiles pero también están más sujetos a generar código de salida inseguro. Aplicamos INDICT en LLMs que van de 7B a 70B parámetros y observamos una mejora consistente del rendimiento tanto por métricas de seguridad como de utilidad en las salidas de generación.
Tareas de práctica de codificación insegura
En primer lugar, evaluamos nuestro enfoque en tareas de generación de código inseguro en las que se observó que los LLMs existentes generaban salidas con problemas de seguridad significativos (en los benchmarks CyberSecEval-1 y CVS). Como se observa aquí, los modelos más potentes, como GPT y los LLM basados en código, resultan más útiles y generan soluciones de código que funcionan para problemas de entrada de gran complejidad. Sin embargo, estos modelos también son más propensos a generar códigos inseguros, posiblemente debido a datos de entrenamiento imperfectos que contienen vulnerabilidades y problemas de seguridad ocultos.
Al aplicar LLMs con INDICT, observamos mejoras de rendimiento consistentes no sólo en seguridad sino también en utilidad, superando a LLMs fuertes como Llama y los modelos GPT. Utilizando CommandR o Llama como modelos de base, INDICT incrementa el rendimiento de forma significativa, por ejemplo, el 80% del código de salida se considera seguro y hasta el 70% del código de salida se considera más útil que el estado del arte anterior o el código verdadero. A partir de los resultados, también observamos las ganancias consistentes de INDICT en las salidas de código de diferentes lenguajes de programación, incluyendo C, Java, Javascript, PHP, Python y Rust.
Tareas de ataque a la seguridad
También evaluamos nuestro enfoque frente a tareas de codificación maliciosas en las que las instrucciones contienen oscuras pero peligrosas intenciones de realizar ataques a la seguridad. Realizamos experimentos con tres tipos de ataques de CyberSecEval-1 y -2: ciberataque, abuso del intérprete e inyección de instrucciones. Estas tareas contienen muestras de prueba con tácticas de ataque clasificadas por el estándar industrial MITRE ATT&CK, así como ataques comúnmente vistos en el dominio del código como el abuso de intérpretes de código para llevar a cabo acciones no autorizadas.
En los modelos de referencia, podemos observar que los modelos más grandes no están necesariamente más protegidos frente a los ataques de seguridad. Por ejemplo, el modelo Llama3-70b puede ser más vulnerable a algunos tipos de ataques que Llama3-8b. Esto plantea la necesidad de métodos eficientes para proteger los LLM actuales de ataques cada vez más complejos. En nuestros experimentos, utilizando modelos basados en CommandR o Llama con INDICT, observamos una mejora significativa del rendimiento mediante medidas de seguridad en los tres tipos de ataques a la seguridad. En particular, a pesar de contar con un modelo más débil, cuando se mejora con INDICT, CommandR puede lograr aumentos significativos y ser más seguro frente a instrucciones de tarea dañinas. Nuestros resultados también demuestran los beneficios de INDICT en diferentes tamaños de modelo, de 8B a 70B parámetros de modelo.
Tareas de generación de final abierto
Nuestro enfoque también se generaliza bien a tareas de final abierto, demostrando el potencial más amplio de un sistema crítico autónomo cooperativo para modelos de IA útiles pero responsables. En concreto, evaluamos INDICT con la prueba de referencia HarmBench, que abarca diversos dominios como la ingeniería social, el acoso, las armas biológicas, etc. A cada muestra de prueba se le añaden distintos métodos de optimización de red-teaming, como ZS, PAP, JB, TAP y PAIR. Estos métodos de red teaming están diseñados para optimizar los avisos de instrucciones maliciosas, engañando en última instancia a los LLM para que cumplan y ayuden en tareas posteriores dañinas.
Informamos de la medida de seguridad como el porcentaje de salidas clasificadas como benignas por el evaluador de IA dado de HarmBench. De acuerdo con nuestras observaciones en experimentos anteriores, aunque se trata de un modelo más débil en cuanto a seguridad, CommandR+INDICT mejora significativamente todos los métodos de optimización de red-teaming. Aunque normalmente se afinan con la alineación de seguridad, los modelos Llama3 siguen beneficiándose del método INDICT, generando salidas más benignas (hasta el 82% de las salidas son seguras de media).
Modelo | Directo | ZS | PAP | JB | TAP | PAIR | Avg. |
---|---|---|---|---|---|---|---|
ComandoR | 33,1 | 23,4 | 25,0 | 23,1 | 18,4 | 18,4 | 23,6 |
ComandoR+INDICT | 65,3 | 52,5 | 63,1 | 37,5 | 46,9 | 43,4 | 51,5 |
Llama3-8b-instruct | 77.5 | 63.4 | 67,8 | 83,1 | 60,6 | 58,1 | 68,4 |
Llama3-8b-instruct+INDICT | 90,6 | 79,4 | 81,9 | 89,1 | 75,9 | 77,8 | 82,4 |
Llama3-70b-instrucción | 68,4 | 60.0 | 68,1 | 90,9 | 61,9 | 57,5 | 67,8 |
Llama3-70b-instruct+INDICT | 85,9 | 75,3 | 74,7 | 90,0 | 75,9 | 75,3 | 79,5 |
Para más resultados experimentales y análisis, por favor refiérase a nuestro documento técnico.
The Bottom Line
INDICT esencialmente facilita un sistema de agente autónomo entre dos modelos críticos, cada uno de los cuales se centra en la calidad de seguridad o utilidad de las salidas del LLM de generación de código «actor». Con acceso a herramientas externas, los dos críticos interactúan entre sí de forma autónoma para generar críticas fundamentadas, mejorando en colaboración los resultados del modelo. Nuestros resultados demuestran los beneficios de INDICT en las tareas relacionadas con el código y más allá, destacando la dirección prometedora de un sistema autónomo y mejorado de múltiples críticos.
Citation
@misc{le2024indictcodegenerationinternal,
title={INDICT: Generación de código con diálogos internos de críticas tanto para la seguridad como para la utilidad},
author={Hung Le y Yingbo Zhou y Caiming Xiong y Silvio Savarese y Doyen Sahoo},
year={2024},
eprint={2407.02518},
archivePrefix={arXiv},
primaryClass={cs.SE},
url={https://arxiv.org/abs/2407.02518},
}