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.
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.
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 .
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
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
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"})
En el mundo cibernético sensible de hoy, la seguridad es estricta.
# 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})
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()
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:
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”)
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.