¿Puede la IA escribir código seguro?
Frank Fischer
3 de mayo de 2023
0 minutos de lecturaLa IA avanza a un ritmo impresionante: cada semana se descubren y anuncian nuevas herramientas y casos de uso, desde escribir poemas hasta proteger redes.
Los investigadores no están completamente seguros de lo que pueden hacer los nuevos modelos de IA, como GPT-4. Esto ha llevado a algunas figuras importantes, como Elon Musk y Steve Wozniak, junto con investigadores de IA, a pedir una pausa de 6 meses en el entrenamiento de modelos más potentes para centrarse en desarrollar protocolos de seguridad y regulaciones.
Una de las principales preocupaciones en torno a GPT-4 es que los investigadores aún no tienen del todo claro lo que puede hacer. Con el tiempo se descubrirán nuevos exploits, jailbreaks y comportamientos emergentes, que son difíciles de prevenir debido a la naturaleza de caja negra de los LLM. OpenAI lo señala en su documento técnico de GPT-4:
OpenAI implementó diversas medidas y procesos de seguridad durante el desarrollo y la implementación de GPT-4, que redujeron su capacidad para generar contenido dañino. Sin embargo, GPT-4 aún puede ser vulnerable a ataques adversarios y exploits o «jailbreaks», y el contenido dañino no es la fuente del riesgo. El ajuste fino puede modificar el comportamiento del modelo, pero las capacidades fundamentales del modelo preentrenado, como la posibilidad de generar contenido dañino, siguen latentes.
GPT-4 acaba de lanzarse, pero contamos con muchos datos sobre su predecesor, GPT-3, que ha impulsado Chat-GPT. Desde su lanzamiento, ChatGPT ha causado tanto revuelo que otros gigantes tecnológicos, como Google y Adobe, también se han apresurado a hacerse notar en el ámbito de la IA.
Desde optimizar la productividad hasta crear contenido, la lista de capacidades de ChatGPT es extensa. Sin embargo, ha habido preocupación por el uso que hacen los desarrolladores de esta herramienta para generar código, debido a problemas de privacidad, riesgos de ciberseguridad y el posible impacto en la postura de seguridad de las aplicaciones.

Riesgos de privacidad y propiedad intelectual al usar herramientas de IA para programar
Desde su lanzamiento a fines del año pasado, consumidores y profesionales han expresado una preocupación generalizada por ChatGPT y los riesgos para la privacidad que implica usarlo con datos internos de la empresa.
Un informe reciente de Cyberhaven reveló que el 3,1 % de los trabajadores había publicado información confidencial en Chat-GPT, lo que demuestra la importancia de crear políticas que regulen el uso interno de las herramientas de IA. Samsung tuvo que emitir recientemente una advertencia interna sobre el uso de la IA a sus empleados, después de que se ingresaran código fuente confidencial y notas de reuniones en Chat-GPT. Ahora, Open-AI tiene estos datos como información de entrenamiento y no está claro si se pueden recuperar.
Herramientas de IA que mejoran la ciberseguridad
No todo son malas noticias para los profesionales de la seguridad. Aunque la tecnología de IA tiene algunas desventajas y plantea inquietudes relacionadas con la privacidad, también proporciona más herramientas a los equipos de seguridad para ayudarlos a enfrentar las amenazas emergentes.
Los equipos rojos de OpenAI usaron GPT-4 con éxito para detectar y explotar vulnerabilidades, así como para realizar ingeniería social, lo que permitirá a los equipos rojos encontrar e informar nuevas vulnerabilidades.
Las empresas de seguridad siguen encontrando nuevas formas de integrar la IA en sus productos actuales. Hace poco anunciamos la nueva función Auto-Fix, que aprovecha la tecnología híbrida de IA para recomendar correcciones de vulnerabilidades generadas por IA y validadas en términos de seguridad por el motor de Snyk Code.
Riesgos para la seguridad de las aplicaciones al programar con IA
Aunque ChatGPT puede ayudar a escribir código, por lo general solo trabaja con fragmentos pequeños a la vez. Por eso, si se usa para generar una gran cantidad de código, los desarrolladores pueden exponerse a riesgos, ya que el software no tiene en cuenta problemas entre archivos ni problemas de varios niveles. En muchos casos, la IA ni siquiera comprende estas situaciones y no puede resolver los problemas relacionados.
La calidad de los productos que generan código depende de los datos con los que se entrenan. Es casi imposible crear código 100 % libre de errores o vulnerabilidades, por lo que las herramientas de generación de código suelen incluir código vulnerable en sus sugerencias. Esto resulta aún más preocupante si tenemos en cuenta esta estadística compartida por Microsoft: el 40 % del código que los desarrolladores revisan y suben ahora lo genera la IA y no se modifica. Esto preocupa mucho a los equipos de AppSec, ya que las organizaciones deben garantizar que su software sea lo más seguro posible.
La herramienta de programación con IA Copilot de Github se entrena con código de fuentes disponibles públicamente, incluido el código de repositorios públicos de GitHub, por lo que genera sugerencias similares al código existente. Si el conjunto de datos de entrenamiento incluye código inseguro, las sugerencias también pueden introducir algunas vulnerabilidades comunes. Un investigador de Invicti puso esto a prueba al crear una aplicación en Python y otra en PHP con Copilot, y luego buscar vulnerabilidades en ambas. Encontró problemas como XSS, inyección SQL y vulnerabilidades de fijación de sesión.
GitHub está muy al tanto de los problemas de seguridad planteados y, en una actualización reciente, agregó una función para filtrar vulnerabilidades:
Las credenciales codificadas de forma rígida, las inyecciones SQL y las inyecciones de rutas se encuentran entre los patrones de programación vulnerables más comunes que aborda el modelo. Con GitHub Copilot, esta solución representa un gran avance para ayudar a los desarrolladores a escribir código más seguro.
La actualización de GitHub Copilot incluye filtrado de vulnerabilidades de seguridad | InfoWorld
Conversaciones en Reddit sobre programación con ChatGPT
A partir del análisis previo de Copilot, quisimos averiguar si ChatGPT seguía sus pasos.
Para hacerlo, decidimos recurrir a Reddit. Los profesionales de tecnología, como los desarrolladores, suelen visitar este sitio web de agregación de noticias y debates para conocer las opiniones de otros profesionales de su campo.
Por eso, es el lugar perfecto para ver cómo se usa ChatGPT para programar: ¿las personas buscan consejos? ¿Advierten a otras personas que no lo usen para este propósito? ¿O lo elogian como un recurso confiable?
Empezamos por analizar un hilo de Reddit sobre programación y ChatGPT, que tenía casi 350 publicaciones. Después evaluamos el sentimiento de los comentarios, centrándonos en el contenido completo de la publicación de Reddit y no solo en el título.
Positivo
Sin contar las publicaciones sin descripción o que no estaban relacionadas con el tema, el 17,9 % expresó un sentimiento positivo. Un usuario publicó una imagen de un código en el que estaba trabajando y explicó: «...Estaba a punto de darme por vencido. Pasé la última media hora buscando una solución y, como último recurso, le pregunté a GPT. Pasan 5 segundos y me da la respuesta perfecta…»
Otro usuario hizo un comentario especialmente elogioso: «Cuando me encuentro con un problema complejo, como refactorizar código o manipular arreglos o listas de formas inusuales, me gusta poder preguntarle a ChatGPT cómo hacerlo. Después de 20 años de quemarme las neuronas para resolver estas cosas cada vez que surgían, ¡por fin puedo delegar esta tarea aburrida a una IA! ¿Qué tipo de programador me convierte eso?»
Sin embargo, entre las publicaciones positivas, se repetía la idea de que ChatGPT no presta atención a los detalles más pequeños:
«...Claro, ha sido increíblemente impresionante. Ha escrito código verosímil y relativamente preciso con gran rapidez. Pero falló estrepitosamente en todos los pequeños detalles…»
«...En general, me encanta ChatGPT para programar. No siempre da con la respuesta correcta, pero no pasa nada. Suele acercarse bastante. Es como tener siempre disponible a un desarrollador junior muy inteligente, aunque imperfecto…»
«...ChatGPT parece saber dónde están los problemas en su código, pero a veces no ofrece la solución correcta para arreglarlos…»
El tono positivo de los comentarios, matizado por las críticas a la falta de atención de ChatGPT a los detalles más específicos, pone de manifiesto el origen de las preocupaciones de seguridad. Si alguien sin experiencia usa la herramienta de IA para crear código, no detectará esos errores.
Negativo
En general, encontramos menos publicaciones negativas sobre programar con ChatGPT que positivas. El 10,3 % de las descripciones expresó un sentimiento negativo, y muchos usuarios manifestaron su frustración ante las imprecisiones.
Un usuario señaló: «...Me parece que las sugerencias de ChatGPT son particularmente poco confiables. Las consultas que genera producen un error tras otro…»
Otro usuario destacó un problema similar y buscaba instrucciones específicas para programar: «Después de pedirle un cambio de código, ChatGPT genera el código completo aunque solo haya cambiado una línea. Probé con instrucciones como “Proporciona únicamente el código de las líneas que cambiaron”, pero no me hace caso y genera el código completo de todas formas. Es una pérdida de tiempo, así que quisiera una instrucción que funcione para que solo me dé las líneas de código que cambiaron».
Búsqueda de ayuda y consejos
Descubrimos que la mayoría de las publicaciones de Reddit sobre ChatGPT y programación buscaban ayuda y consejos (44,6 %).
Las solicitudes van desde preguntar si al código que les proporcionó ChatGPT le falta algo importante hasta pedir que traduzca código de un lenguaje a otro.
Al analizarlo con más detalle, descubrimos que estas publicaciones se centraban en recursos de aprendizaje (51,4 %), solicitudes entre pares (14,3 %), preguntas sobre calidad (14,3 %), creaciones de usuarios (11,4 %), predicciones (5,7 %) y experiencia de usuario (2,9 %).
Conclusiones de estos datos
Quienes realmente entienden su código siguen encontrando pequeños ajustes y cambios en los detalles. En su estado actual, Chat-GPT es increíblemente útil para tareas más sencillas, pero no siempre generará un código perfecto para tus necesidades.
Quienes no entienden su código quedan muy impresionados y se muestran muy positivos, porque pueden generar código que cumple sus objetivos sin necesitar tantos conocimientos.
Es poco probable que cualquiera de los dos grupos conozca los problemas de seguridad que generan las herramientas de IA, sobre todo quienes recién empiezan a desarrollar. Por eso, es muy posible que los desarrolladores que usan herramientas de IA sin tener en cuenta la seguridad incorporen en su base de código vulnerabilidades generadas por las sugerencias de IA.
Esto cobra aún más importancia si observamos las tendencias de uso de la IA. El 42 % de las empresas encuestadas por IBM el año pasado busca formas de usar la IA en sus organizaciones, así que es fundamental tener en cuenta la seguridad al usar herramientas de IA.
Consideraciones clave para la seguridad de las aplicaciones en un mundo con IA
Las herramientas de IA, como Chat-GPT y Copilot, pueden acelerar el desarrollo, pero deben combinarse con herramientas de seguridad integrales para garantizar que el código que generan sea seguro. Los LLM no pueden reemplazar a un compilador ni a un intérprete durante el desarrollo, del mismo modo que no pueden reemplazar las herramientas de seguridad especializadas.
Se deben establecer políticas internas sobre el uso de herramientas de IA. Estas deben abarcar aspectos como los siguientes:
Definición clara de los casos de uso aceptables: Define qué casos de uso son aceptables para las herramientas de IA y qué tipos de decisiones se pueden tomar con ellas.
Selección y uso de datos: Especifica el tipo y la calidad de los datos que se pueden usar en los modelos de IA y qué fuentes de datos son adecuadas.
Privacidad y seguridad de los datos: Asegúrate de que todos los datos utilizados en los modelos de IA estén debidamente protegidos y de que se tomen las medidas adecuadas para mantener su privacidad y seguridad.
Requisitos de cumplimiento: Asegúrate de que el uso de las herramientas de IA cumpla con todos los requisitos legales, regulatorios y éticos.
Actualizaciones periódicas: Actualiza las políticas continuamente a medida que se desarrollen nuevas herramientas de IA y evolucionen las necesidades de la empresa.
Esta no es una lista exhaustiva de políticas para el uso de la IA en tu organización, pero puede servir como punto de partida.
Los equipos de seguridad deben estar al tanto de los avances en IA que ofrecen más herramientas tanto a los equipos de seguridad como a los actores maliciosos. Las herramientas de IA pueden ser clave para defenderse del aumento de los exploits, ya que brindan herramientas más eficientes a los equipos de seguridad, sobre todo mientras las empresas siguen teniendo dificultades para contratar especialistas en seguridad. Esperamos que a lo largo de este año se descubran nuevos casos de uso para las herramientas de IA, por lo que es fundamental mantenerse al día con los avances recientes. Los equipos de seguridad también deben estar al tanto de cuánto usan la IA sus equipos de desarrollo, qué proporción del código que se agrega a la base de código se genera con IA y si cuentan con los controles de seguridad adecuados para gestionarlo.
La seguridad del código es solo un aspecto del desarrollo. El desarrollo de software combina personas, procesos y tecnología. La IA puede ayudar con la parte tecnológica, pero siguen siendo necesarios los demás factores. La calidad es fundamental al programar: el factor humano siempre será importante.
Consejos de Snyk sobre las mejores opciones de seguridad de aplicaciones
Tanto si tu código está escrito completamente por personas como si se generó en su mayor parte con IA, es importante dominar los fundamentos de la seguridad para minimizar tu superficie de ataque. Evaluar la seguridad de tus aplicaciones es fundamental para proteger el código frente a quienes quieran explotarlo. Realizar una evaluación de seguridad de aplicaciones implica probar las aplicaciones para detectar amenazas y desarrollar estrategias para defenderse de ellas. Este proceso permite a las organizaciones evaluar la postura de seguridad actual de sus aplicaciones e identificar formas de mejorar la protección de su software frente a futuros ataques. Los desarrolladores deben realizar evaluaciones de seguridad de aplicaciones con regularidad para asegurarse de que las medidas de seguridad sigan siendo actuales y eficaces.
Cinco pasos para evaluar la seguridad de tus aplicaciones:
Identifica posibles actores de amenazas
Determina qué datos confidenciales vale la pena proteger
Traza la superficie de ataque de la aplicación
Evalúa los puntos problemáticos del proceso actual de AppSec
Crea una hoja de ruta de seguridad para eliminar los puntos débiles
Aunque herramientas de IA como ChatGPT pueden pasar por alto puntos débiles y vulnerabilidades, Snyk es una plataforma de seguridad para desarrolladores mucho más preparada para esta tarea. Con Snyk, puedes identificar y proteger automáticamente las vulnerabilidades en tu código, las dependencias de código abierto, los contenedores y los entornos en la nube.
La plataforma también puede integrarse directamente con herramientas de desarrollo, pipelines de automatización y flujos de trabajo de programación para ofrecer una seguridad fluida y eficaz.
Acelera el desarrollo seguro
Snyk reúne a desarrolladores y equipos de seguridad para garantizar velocidad y seguridad a escala.



