Las 10 mejores prácticas para tener un código más seguro.

Las 10 mejores prácticas para tener un código más seguro.

Las 10 mejores prácticas para tener un código más seguro.

Las 10 mejores prácticas para tener un código más seguro.

1- Entrada validada

Valide la entrada de todas las fuentes de datos que no son confiables. Una validación de entrada adecuada puede eliminar la gran mayoría de vulnerabilidades del software. Desconfíe de la mayoría de fuentes de datos externas, incluyendo los argumentos de línea de comandos, las interfaces de red, las variables ambientales y los archivos controlados por el usuario.

2- Tenga en cuenta las advertencias del compilador

Compile el código utilizando el nivel de advertencia más alto disponible para su compilador y elimine las advertencias modificando el código. Utilice herramientas de análisis estático y dinámico para detectar y eliminar las fallas de seguridad adicionales.

3- Arquitectura y diseño para políticas de seguridad

Crea una arquitectura de software y diseñe su software para implementar y hacer cumplir las políticas de seguridad. Por ejemplo, si su sistema requiere diferentes privilegios en momentos diferentes, considere la posibilidad de dividir el sistema en distintos subsistemas de intercomunicación, cada uno con un conjunto de privilegios adecuado.

4- Mantenlo simple

Mantenga el diseño lo más simple y pequeño posible. Los diseños complejos aumentan la probabilidad de que se cometan errores en su implementación, configuración y uso. Además, el esfuerzo necesario para lograr un nivel apropiado de seguridad aumenta dramáticamente a medida que los mecanismos de seguridad se vuelven más complejos.

5- Denegación Predeterminada

Basar las decisiones de acceso sobre el permiso en lugar de la exclusión. Esto significa que, por defecto, se deniega el acceso y el esquema de protección que identifica las condiciones bajo las cuales se permite el acceso.

6- Adherirse al principio del privilegio mínimo

Cada proceso debe ejecutarse con el mínimo conjunto de privilegios necesarios para completar el trabajo. Cualquier permiso elevado debe mantenerse durante un tiempo mínimo. Este enfoque reduce las oportunidades que un atacante tiene de ejecutar código arbitrario con privilegios elevados.

7- Desinfectar los datos enviados a otros sistemas

Desinfectar todos los datos pasados ​​a los subsistemas complejos, como los shells de comandos, las bases de datos relacionales y los componentes comerciales (COTS). Los atacantes pueden invocar la funcionalidad no utilizada en estos componentes mediante el uso de SQL, comandos u otros ataques de inyección. Esto no es necesariamente un problema de validación de entrada porque el subsistema complejo que se invoca no entiende el contexto en el que se realiza la llamada. Debido a que el proceso de llamada entiende el contexto, es responsable de desinfectar los datos antes de invocar el subsistema.

8- Practique la defensa en profundidad

Maneje el riesgo con múltiples estrategias defensivas, de modo que si una capa de defensa resulta ser inadecuada, otra capa de defensa puede evitar que una falla de seguridad se convierta en una vulnerabilidad explotable y / o limitar las consecuencias de una explotación exitosa. Por ejemplo, la combinación de técnicas de programación seguras con entornos de tiempo de ejecución seguros debería reducir la probabilidad de que las vulnerabilidades que permanecen en el código en el momento de la implementación puedan ser explotadas en el entorno operativo.

9- Utilizar técnicas eficaces de aseguramiento de la calidad

Las técnicas de aseguramiento de buena calidad pueden ser eficaces para identificar y eliminar las vulnerabilidades. Las pruebas de Fuzz, las pruebas de penetración y las auditorías de código fuente deben incorporarse como parte de un programa eficaz de garantía de calidad.




Revisiones de seguridad independientes pueden conducir a sistemas más seguros. Los revisores externos aportan una perspectiva independiente; Por ejemplo, en la identificación y corrección de supuestos inválidos.

10- Adoptar un estándar de codificación segura

Desarrolle o aplique un estándar de codificación segura para su lenguaje y plataforma de desarrollo de destino.

Bono

Defina los requisitos de seguridad.

Identifique y documente los requisitos de seguridad a principios del ciclo de vida del desarrollo y asegúrese de que los artefactos de desarrollo posteriores se evalúan para el cumplimiento de esos requisitos. Cuando no se definen requisitos de seguridad, la seguridad del sistema resultante no puede evaluarse de manera efectiva.

Modelo de amenazas

Utilice el modelado de amenazas para anticipar las amenazas a las que se someterá el software. El modelado de amenazas implica la identificación de activos clave, la descomposición de la aplicación, la identificación y categorización de las amenazas a cada activo o componente, la calificación de las amenazas basadas en una clasificación de riesgo y el desarrollo de estrategias de mitigación de amenazas implementadas en diseños, códigos y casos de prueba.

 

Leave a Reply