paint-brush
¿Es realmente seguro su código generado por IA?por@danielcrouch
Nueva Historia

¿Es realmente seguro su código generado por IA?

por Daniel7m2025/03/19
Read on Terminal Reader

Demasiado Largo; Para Leer

El código generado por IA es la principal causa de las 10 principales vulnerabilidades, y casi el 40 % del código presenta errores de seguridad. Los modelos de IA se entrenan con toda la información disponible en internet. La calidad, la fiabilidad, la seguridad, etc. del código pueden diferir de las generadas por desarrolladores humanos.
featured image - ¿Es realmente seguro su código generado por IA?
Daniel HackerNoon profile picture
0-item

El desarrollo y la programación de software, antes considerados tareas que requerían gran experiencia, ahora pueden ser realizados por cualquier persona mediante lenguaje natural. Una función que antes tardaba días o meses en desarrollarse ahora puede desarrollarse en minutos u horas gracias al código de un modelo de IA. Por ejemplo, OpenAI Codex y Google BERT se capacitan en blogs web de programación, preguntas de Stack Overflow, etc.


Estos modelos inteligentes crean código mediante probabilidades matemáticas, aunque también son conocidos por alucinar y presentar información falsa. Una investigación académica afirma que la generación de código con IA es la principal causa de las 10 principales vulnerabilidades, y casi el 40 % del código presenta errores de seguridad . Muchas de las empresas líderes, junto con los nuevos proveedores de SaaS, están aprovechando la IA para optimizar sus ofertas. Los programadores de SaaS también deben adquirir más conocimientos sobre las herramientas SaaS basadas en IA.

¿Qué hace que el código generado por IA sea inseguro?

El cumplimiento de los estándares de programación y la calidad del código determinan la seguridad del software. Sin embargo, los modelos de IA se entrenan con toda la información disponible en internet. La calidad, la fiabilidad, la seguridad y otros aspectos del código pueden diferir de los generados por desarrolladores humanos. Por ejemplo, un modelo entrenado con ejemplos de desarrollo web puede presentar prácticas deficientes de validación de datos. Esta falta de validación puede generar problemas de seguridad cuando el modelo genera código que adopta las mismas prácticas deficientes.

5 indicadores que sugieren que el código contiene debilidades de seguridad

Independientemente del tamaño (millones o miles de millones de parámetros), los modelos suelen alucinar y realizar predicciones incorrectas. Cuando un desarrollador típico ve el código que produce una IA, pasará por alto las sutiles pero graves vulnerabilidades de seguridad. Sin embargo, para un desarrollador con un conocimiento completo de los patrones de diseño y desarrollo, las fallas están a solo una revisión de ser identificadas. Los desarrolladores pueden aprovechar estos patrones para descubrir vulnerabilidades y alinearse con las mejores prácticas de seguridad de SaaS .

1. La inferencia de tipos y las validaciones de entrada no se aplican

Los frameworks y bibliotecas modernos dependen en gran medida de interfaces/enumeraciones para la inferencia y la validación. Esto garantiza que el código funcione correctamente y ofrece seguridad. El código generado por IA no inferirá a menos que lo instruyamos. Incluso después de crear un indicador preciso, la incompatibilidad de tipos y la aplicación de la validación pueden no ser adecuadas para el caso de uso. Para localizar y corregir incompatibilidades en el código, los desarrolladores deben conocer bien el dominio y los requisitos del negocio.


 def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result

2. Estado no estándar y uso compartido de contexto entre clases/objetos

Los programas comparten objetos de forma pública, privada y protegida. Las funciones y clases de orden superior heredan el estado del objeto accediendo directamente a variables públicas o protegidas para realizar cálculos. Si se realiza algún error durante la implementación o la ejecución, pueden producirse fácilmente cuellos de botella de seguridad o rendimiento. Los desarrolladores de SaaS deben implementar adecuadamente su lógica de gestión de estado y contexto y revisarla para garantizar un uso correcto y seguro.


 class InsecureClass: def __init__(self, owner, balance, password): self.owner = owner # Public attribute self._balance = balance # Protected attribute self.__password = password # Private attribute # Public def def get_balance(self): return self._balance # Protected def def _update_balance(self, amount): self._balance += amount # Private def def __validate_password(self, input_password): return self.__password == input_password # Insecure def exposing private data def insecure_password_exposure(self): return self.__password

3. Implementación deficiente de técnicas de manejo y compartición de datos

Los servicios comparten y reciben información a través de la red. Hoy en día, la conectividad segura y el manejo de datos han sido cruciales para el éxito de los sistemas en la nube. Al leer, procesar y compartir datos confidenciales entre organizaciones a través de redes de datos distribuidas, se deben implementar protocolos y técnicas de seguridad robustos para evitar la interceptación de datos . Mediante IA, el desarrollador de SaaS debe implementar cada aspecto de la arquitectura en aplicaciones completas.


 #Insecure Data Sharing @app.route("/user/<int:user_id>", methods=["GET"]) def get_user(user_id): user = users.get(user_id) if user: return jsonify(user) # All user data exposed, including secrets # Insecure Data Handling @app.route("/update_email", methods=["POST"]) def update_email(): data = request.json() user_id = data.get("user_id") new_email = data.get("new_email") if user_id in users: users[user_id]["email"] = new_email # No validation of new_email return jsonify({"message": "Email updated successfully"})

4. Manejo inadecuado de secretos y autenticación

En el mundo cibernético sensible de hoy, la seguridad es estricta. Implementación de RBAC Es fundamental para el control de acceso proteger la identidad, manteniendo la privacidad y el cumplimiento normativo. Cuando un LLM genera el código, por defecto, habrá un mecanismo que conecta y autentica con el proveedor de autenticación con una implementación básica. Las soluciones simples no son suficientes para garantizar la seguridad frente a las ciberamenazas emergentes. Al añadir funcionalidades personalizadas, los desarrolladores deben realizar pruebas exhaustivas para garantizar una implementación sólida de la seguridad y la gestión de la autenticación.


 # Insecure authentication @app.route("/login", methods=["POST"]) def login(): data = request.json() email = data.get("email") password = data.get("password") for user_id, user in users.items(): if user["email"] == email and user["password"] == password: return jsonify({"message": "Login successful", "user_id": user_id})

5. Dependencias obsoletas con uso de funcionalidades obsoletas

La programación de IA se basa en bibliotecas y frameworks desarrollados por la comunidad y de código abierto. Las personas apoyan las nuevas tecnologías mediante el uso de estas prometedoras herramientas y la creación de nuevas. Los datos con los que se entrenaron estos modelos no están actualizados y sus capacidades están estancadas, al igual que su conocimiento. Con el desarrollo tecnológico, muchas funciones quedarán obsoletas y algunas bibliotecas dejarán de ser relevantes para las necesidades actuales. Un desarrollador de SaaS se encarga de revisar y utilizar las dependencias válidas para garantizar la funcionalidad y la seguridad.


 import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()

Consejos para que el código generado por IA sea seguro de usar

Las capacidades avanzadas de codificación de los Modelos de Lenguaje Grandes se deben a sus extensos cálculos matemáticos. No se requieren técnicas sofisticadas para que cumplan con los estándares de seguridad y programación. Podemos usar estas sencillas comprobaciones para que el código generado por IA sea seguro y cumpla con los estándares:


  1. La revisión de código con los equipos de seguridad y arquitectura debe ser una parte estándar de su ciclo de vida.
  2. Integre pasos de validación y pruebas de seguridad automatizadas en las herramientas de control de versiones.
  3. Incluya comprobaciones de dependencia y cumplimiento en las pruebas de KPI.
  4. Adopte la arquitectura de confianza cero con herramientas de pruebas de seguridad estáticas y dinámicas.
  5. Aproveche las prácticas de DevSecOps y la inteligencia artificial en la sombra.

Cómo gestionar código generado por IA inseguro con una simple acción de Github

Por muy minucioso que sea la revisión y auditoría del código, siempre existe la posibilidad de error humano. Confiar únicamente en auditorías manuales no es suficiente, ya que necesitamos verificaciones predefinidas que puedan probar y validar el código en cuanto entra en el sistema de control de versiones. ¿Qué mejor verificación que añadir una acción de Github que ejecute automáticamente verificaciones de seguridad y calidad al generar una solicitud de solicitud (PR)?


 name: Simple Security Checks for AI generated Code on: push: branches: - main pull_request: branches: - main jobs: security-and-quality-check: runs-on: ubuntu-latest Steps: - name: Repository checkout uses: actions/checkout@v3 - name: Python setup uses: actions/setup-python@v4 with: python-version: ">=3.9" - name: Dependency installation run: | python -m pip install --upgrade pip pip install bandit pytest - name: Identifying insecure libraries and patterns run: | echo "Checking for insecure patterns..." if grep -r "md5.new(" .; then echo "ERROR: Insecure MD5 hashing detected. Use hashlib.sha256 or bcrypt instead." exit 1 fi echo "No insecure patterns detected." - name: Scanning for security vulnerabilities run: | echo "Running Bandit security scanner..." bandit -r . - name: Running unit tests run: | echo "Running unit tests..." pytest test/unit --cmodopt=local - name: Notifying on failure if: failure() run: | send_slack_notification(“Unsafe code merge detected, fix immediately”)

Conclusión

Los modelos de lenguaje extensos son herramientas muy útiles para que los desarrolladores de SaaS generen código e información con indicaciones naturales. Sin embargo, presentan riesgos de seguridad y, en ocasiones, generan código deficiente que no se adapta a las necesidades empresariales. Los desarrolladores de SaaS deben ser muy cuidadosos al usar estas herramientas e implementar código generado por IA en casos prácticos reales. Esta guía práctica se centra en los factores que surgen e influyen en la seguridad, a la vez que muestra cómo superar estos desafíos.