Los 5 defectos de codificación más importantes que se deben tener en cuenta para DevSecOps



La integración del análisis estático en el ciclo de desarrollo puede prevenir defectos de codificación y entregar software seguro más rápido.

Los profesionales de la seguridad están acostumbrados a intervenir al ultimate del proceso de desarrollo de application para identificar vulnerabilidades de seguridad, muchas de las cuales podrían haberse evitado con una intervención anterior. Para abordar este problema, los desarrolladores que ya están bajo presión para entregar computer software cada vez más complejo más rápido y menos costoso están siendo reclutados para implementar la seguridad en una etapa más temprana del ciclo de desarrollo bajo el movimiento de «cambio a la izquierda».

Para comprender los obstáculos que enfrentan los desarrolladores para cumplir con los nuevos requisitos de seguridad, considere los cinco defectos de codificación más comunes y cómo abordarlos.

1. Errores de memoria
Los errores en la lectura de la memoria pueden afectar potencialmente la confidencialidad y la integridad al filtrar información reasonable, mientras que los errores en la escritura de la memoria pueden potencialmente subvertir el flujo de ejecución, lo que puede afectar los tres componentes de la tríada de seguridad: confidencialidad, integridad y disponibilidad. Los ejemplos comunes incluyen errores de saturación / insuficiencia de búfer y de uso después de la liberación (UAF). Incluso los programadores más hábiles pueden generar inadvertidamente estos defectos subyacentes, que son difíciles de detectar y se pueden encontrar incluso en códigos bien probados y con certificación de seguridad. Si bien los estándares de codificación se emplean a menudo para reducir los errores de memoria, no son suficientes. El análisis estático profundo, el análisis del flujo de datos y la ejecución simbólica son absolutamente necesarios para detectar errores de memoria al principio del ciclo de desarrollo.

2. Errores de programación
Esta clase de errores se debe principalmente al uso incorrecto de C / C ++, como las variables no inicializadas, la doble liberación de punteros y la conversión implícita entre variables firmadas y no firmadas. Los errores de programación, algunos de los cuales pueden ser explotables, pueden no manifestarse durante las pruebas funcionales y de regresión, incluso si dan como resultado un estado del programa corrupto. No obstante, pueden provocar problemas graves en los sistemas desplegados. El análisis estático puede identificar errores de codificación y malentendidos en la semántica del lenguaje de programación.

3. Llamadas a funciones peligrosas
Algunas funciones de la API se consideran potencialmente dañinas y no seguras. La función will get () en C / C ++ es un buen ejemplo, ya que puede producir fácilmente condiciones de desbordamiento del búfer de destino que pueden afectar la integridad. Otras llamadas a funciones pueden tener comportamientos específicos de la implementación que las hacen peligrosas. Las llamadas a funciones peligrosas se identifican fácilmente mediante un análisis estático que puede buscar una lista de funciones peligrosas.

4. Uso indebido de la criptografía
Las funciones criptográficas son una parte importante para mantener la confidencialidad de los datos, ya sea en movimiento o en reposo. Sin embargo, pocos desarrolladores son expertos en criptografía, y el uso indebido de las funciones criptográficas de la biblioteca C puede generar problemas de seguridad, especialmente el uso de algoritmos débiles, como Knowledge Encryption Conventional (DES) y MD5, o el uso indebido de criptografía. Otros ejemplos incluyen el uso de claves codificadas o datos salt para hashes. El mal uso de la criptografía puede afectar la confidencialidad y la integridad. Afortunadamente, estos problemas son fáciles de identificar mediante análisis estático.

5. Problemas de datos contaminados
Los datos contaminados presentan uno de los problemas más desafiantes para los desarrolladores y también pueden afectar la integridad y la confidencialidad. En esencia, los datos contaminados son una condición en la que los datos que fluyen hacia un sistema no se validan para eliminar elementos maliciosos y garantizar que estén dentro del rango de valor esperado. Detectar vulnerabilidades de inyección de datos es muy difícil mediante la inspección humana a posteriori.

Para detectar problemas de datos contaminados, los datos que fluyen al sistema a través de cualquier forma de entrada (por ejemplo, usuarios, dispositivos o enchufes) deben rastrearse desde su fuente (donde ingresa al software) hasta su receptor (donde se united states). ). Y antes de que estos datos se utilicen en llamadas a la API, para acceder a estructuras de datos o en cualquier parte de la lógica de programación, es necesario validarlos. De lo contrario, podría dar lugar a vulnerabilidades de inyección de datos, como inyección de cadenas de formato, inyección de Protocolo ligero de acceso a directorios (LDAP) o inyección SQL. El análisis estático puede computar a través de estos flujos y proporcionar advertencias fáciles de entender para ayudar a los programadores a prevenir situaciones peligrosas. Para hacerlo bien, el análisis estático debe realizar análisis de flujo de datos y ejecución abstracta para evaluar qué flujos de ejecución son posibles.

Análisis estático para detectar vulnerabilidades
El análisis estático, también conocido como prueba de seguridad de aplicaciones estáticas (SAST), inspecciona el código fuente y binario de una aplicación para detectar posibles vulnerabilidades de seguridad, incluidos los cinco errores de codificación principales anteriores. Dado que SAST se puede utilizar dentro de los flujos de trabajo de desarrollo continuo / integración continua (CI / CD) de los desarrolladores, es appropriate y no ralentiza los procesos de desarrollo ágiles. De hecho, puede acelerar el desarrollo de software program y reducir los costos al descubrir fallas mientras un desarrollador escribe código, por lo que se pueden corregir antes de la prueba y mucho antes de que una aplicación entre en producción. Como tal, SAST cumple una función crítica para mejorar la seguridad del código y debería ser parte de cualquier esfuerzo de DevSecOps de «cambio a la izquierda».

Walter Capitani, director de gestión técnica de productos de GrammaTech, es un experto reconocido en seguridad de program integrado y empresarial. Ha dirigido equipos de desarrollo de productos globales centrados en computer software seguro y crítico para la seguridad, rendimiento de aplicaciones SaaS, archivo … Ver biografía completa

Lectura recomendada:

Más información





Enlace a la noticia initial