secure coding guidelines
Este tutorial explica la codificación segura, cómo evitar vulnerabilidades relacionadas con la seguridad y proporciona pautas de codificación y lista de verificación para prácticas de codificación seguras:
Para tener la seguridad incorporada en el software e implementar las pautas de codificación segura y las mejores prácticas, toda la organización, junto con el equipo identificado para trabajar en el desarrollo de aplicaciones previsto, debe considerar ciertos aspectos.
Aquí, discutiremos aquellos aspectos que ayudan a desarrollar un software seguro.
Es tan simple como que si un desarrollador no sabe lo que se entiende por 'Seguridad para el software' y cómo un pirata informático puede piratear su software, tomar el control de él e intentar explotarlo, es simplemente imposible codificar un software seguro. Por lo tanto, el desarrollador debe comprender primero el significado de la codificación segura.
Lo que vas a aprender:
- ¿Qué es la codificación segura?
- Directrices de codificación segura
- Lista de verificación para prácticas de código seguro
- Conclusión
¿Qué es la codificación segura?
La codificación segura es diseñar y desarrollar software evitando las debilidades que conducen a vulnerabilidades relacionadas con la seguridad al adherirse a los estándares de seguridad especificados y las mejores prácticas de la industria.
La primera pregunta que surge en la mente de todos es 'Cuánta seguridad se requiere para nuestro software' o ¿Cuándo podemos decir que nuestro software está protegido? y ¿Cuáles son esos estándares de seguridad? ?
Los fraudes y las amenazas a la seguridad aumentan día a día y estamos viendo nuevas variedades y formas de piratería, incluso en el supuesto software más seguro.
Recientemente escuchamos que el programa Aaadhar de UIDAI fue manipulado para obtener datos personales. Por lo tanto, es realmente difícil saber cuánta seguridad se requiere para el software y cuáles son los estándares de seguridad a menos que entendamos las amenazas involucradas en el software y las prioricemos en función de los riesgos para el negocio.
Es posible que sea difícil proporcionar una protección de seguridad del 100% al software, pero si el equipo del programa analiza el Riesgos y valores que están involucrados en su software, es decir, amenazas potenciales y si el equipo puede encargarse de mitigar esos riesgos, entonces sería bueno desde el punto de seguridad de la aplicación.
Por lo tanto, la primera tarea del equipo es identificar y analizar los riesgos y valores involucrados en su aplicación y comprender las posibles opciones de mitigación y adoptar la mejor opción en consecuencia.
ejecutar archivos .jar windows 10
Entonces, una vez identificadas, las diez principales vulnerabilidades clasifican casi todos los ataques a los que es probable que se enfrente un programa. Esto ayudará a dar sentido a las amenazas y priorizar los esfuerzos de seguridad y desarrollo más hacia la prevención que hacia la mitigación.
P.ej. Si bien estamos planeando desarrollar una aplicación relacionada con la atención médica, que maneja y almacena los datos de salud del individuo y su información personal, el mayor riesgo de seguridad para la aplicación es robar los datos de salud personales.
Mitigación de riesgos
Para mitigar el riesgo,
- La implementación de la seguridad para el acceso a los datos por parte de un usuario no autorizado debe manejarse con la autenticación y autorización adecuadas (implementaciones de políticas de contraseñas seguras, autenticación de 2 factores).
- Se debe tener cuidado para garantizar que no haya fugas de datos durante la transmisión de datos de una fuente a otra mediante la implementación de canales seguros (HTTPS) de transmisión de datos e implementación de cifrado de datos durante el tránsito.
- La manipulación o el robo de datos en reposo también es otra posibilidad. Por lo tanto, el almacenamiento de datos de salud personal (mediante cifrado) es muy esencial.
Antes de pasar al 'Estándar de codificación segura', siempre es mejor que todo el equipo del programa tenga un 'Sesión de sensibilización sobre seguridad' y discutir e intercambiar ideas sobre
- El requisito de seguridad para su producto específico.
- Posibles beneficios que tendría un pirata informático pirateando su sistema.
- Posibles formas y medios de comprometer la seguridad de su aplicación.
- Se siguieron prácticas de seguridad comunes en una industria y un dominio similares.
- Comprensión de los problemas de seguridad típicos de sus respectivos programas.
También ayuda al equipo a manejar mejor, si pueden entender Fuentes de las vulnerabilidades que su software puede enfrentar y las razones por las cuales el software está construido con Deficiente / inadecuado Seguridad .
Razones para una implementación de seguridad inadecuada
En general, las siguientes son algunas de las razones de una implementación de seguridad inadecuada en la aplicación.
- Se da prioridad al lanzamiento funcional que a los aspectos de seguridad.
- Ignorancia o falta de conocimiento sobre la seguridad del software y los piratas informáticos.
- No hay suficiente claridad sobre el Programa o sobre el Diseño del Software en sí.
- La complejidad del Programa.
- No hay suficientes datos, información sobre el sistema en vivo donde se implementará.
- Sin consideración de seguridad en las fases SDLC.
- Conocimiento y comprensión insuficientes de los detalles del lenguaje utilizado en el software.
- No hay suficiente conocimiento para el equipo y los desarrolladores sobre las pautas de codificación de seguridad.
Sabemos que no todos los desarrolladores y probadores conocen la seguridad de una aplicación y es posible que no tengan un conocimiento profundo de las vulnerabilidades y exploits de seguridad, especialmente de la aplicación en la que trabajarían. Por lo general, estarán familiarizados con 'Cómo codificar funcionalmente' pero no todos saben 'cómo codificar de forma segura'.
Por lo tanto, el aspecto muy importante para que la organización adopte prácticas de codificación seguras en su software es primero 'Formar personas' . Por lo tanto, es muy importante capacitar a su equipo sobre los aspectos de codificación segura, las mejores prácticas de codificación de seguridad y el uso correcto de la herramienta.
El principio de diseño más importante de la seguridad del software es 'Implementar la seguridad por diseño y por defecto' .
Directrices de codificación segura
Para lograr la seguridad, es muy esencial tener un 'Estándar de codificación segura' identificado para un programa desde el principio del desarrollo de la aplicación, y esto ayuda al equipo a cuidar los valores predeterminados de seguridad del software y a protegerlo de los ataques.
Es fundamental asegurarse de que todo el equipo esté Obligado a adherirse a este estándar , independientemente del lenguaje de codificación y las herramientas que estén utilizando en el programa.
A continuación se muestran algunos ejemplos que deben implementarse de forma predeterminada en el diseño de código seguro:
- El acceso debe restringirse solo a usuarios autenticados y la autenticación debe implementarse en cada capa.
- Los canales de comunicación deben estar cifrados para proteger los tokens de autenticación.
- Todas las claves, contraseñas y certificados deben almacenarse y protegerse adecuadamente.
- Es necesario implementar el cifrado de archivos, el cifrado de bases de datos y el cifrado de elementos de datos.
Selección de idioma para codificación segura
La selección del idioma para la codificación puede no depender de la codificación segura. No hay nada específico como lenguaje seguro o no seguro para codificar para construir un software seguro.
Es simplemente cómo usamos un lenguaje de programación para construir el software y cuánto conocimiento profundo tiene el desarrollador sobre el lenguaje de codificación para implementar aspectos de seguridad.
Sin embargo, se aclara que, aunque Los estándares de codificación segura son independientes de la selección del idioma, las mejores prácticas de código seguro dependen del idioma, de la plataforma y de la implementación .
preguntas y respuestas de la entrevista de informatica por 5 años de experiencia
Por lo tanto, para tener un Código Seguro, es fundamental que el Desarrollador tenga un conocimiento profundo del lenguaje que se está utilizando en el programa, para que las mejores prácticas de seguridad se puedan implementar fácilmente.
Ejemplo:
- La probabilidad de vulnerabilidad de desbordamiento del búfer difiere de un idioma a otro, pero C, C ++ y Assembly se consideran más susceptibles debido a sus capacidades de administración de memoria obsoletas. Varias funciones estándar de C lib, como strcpy () y memcpy (), son vulnerables a los ataques de desbordamiento del búfer. El uso incorrecto de estas funciones, al copiar un búfer de origen que es demasiado grande para caber en el búfer de destino, produce un desbordamiento del búfer.
- El problema común en las aplicaciones web basadas en Java son las posibles pérdidas de recursos que pueden ocurrir debido a los recursos del sistema abiertos, como un archivo, un socket y las conexiones de la base de datos.
El siguiente aspecto de la seguridad es el herramientas a utilizar en el Programa de Aplicación para optimizar la seguridad, utilizando herramientas como Entornos de desarrollo integrados será más beneficioso ya que proporcionan una gran cantidad de Alertas a los usuarios y llamar la atención sobre esas alertas para intentar mejorar la calidad del software.
- La integración de bibliotecas / complementos comerciales o de código abierto como Eclipse, Spring Tool Suite, RAD con IDE ayuda a los desarrolladores a escribir código seguro mediante la detección e identificación de código potencialmente vulnerable y proporciona alertas sobre hallazgos relacionados con la ejecución de archivos maliciosos, fuga de información y manejo inadecuado de errores.
También es fundamental utilizar el Analizadores estáticos y dinámicos para mejorar los aspectos de seguridad del software. Generalmente, los analizadores estáticos están optimizados para tipos específicos de error, por lo que terminan encontrando una gran cantidad de falsos positivos mientras identifican errores específicos. A veces hay posibilidades de que también se pierdan los errores reales.
Por lo tanto, se recomienda utilizar múltiples analizadores estáticos para obtener una mejor cobertura de diferentes tipos de errores y evitar muchos falsos positivos. En ocasiones, también se recomienda realizar prueba manual a eliminar falsos positivos .
Recomendaciones y reglas de codificación segura
Será bueno que el Programa defina un conjunto de 'Recomendaciones y reglas de codificación segura' que el código fuente puede ser evaluado para su cumplimiento de modo que los probadores puedan llevar a cabo la 'Pruebas de cumplimiento de conformidad' para cada uno de estos estándares de codificación segura.
Por lo tanto, el código de seguridad puede certificarse como Conforme o No Conforme usando esas reglas contra el punto de referencia establecido.
Algunas de las reglas que se mencionan a continuación se pueden usar para verificar si hay violaciones de seguridad:
- Los archivos deben cerrarse cuando ya no se necesiten.
- Siempre que pase una estructura a través de un límite, se debe evitar la fuga de información.
- Los objetos deben declararse con una duración de almacenamiento adecuada.
Por lo tanto, los casos de prueba para verificar estas reglas deben diseñarse y llevarse a cabo para verificar el cumplimiento de la conformidad. También se identifica que la mayoría de las vulnerabilidades son causadas por errores de programación comunes típicos.
Por lo tanto, el desarrollador debe comprender 'Método de codificación inseguro' , mientras también aprenden las mejores prácticas de codificación segura. Es ideal para recopilar los errores de programación más comunes que contribuyen a las vulnerabilidades de seguridad de su aplicación para que puedan ser atendidos durante la codificación.
Estos errores de programación típicos se deben principalmente a desbordamientos de búfer, secuencias de comandos entre sitios y fallas de inyección.
Algunas de las vulnerabilidades de programación típicas incluyen,
- Inyección SQL (neutralización inadecuada de elementos especiales utilizados en un comando SQL).
- Desbordamiento de enteros.
- Desbordamiento del búfer (copia del búfer sin comprobar el tamaño de la entrada).
- Cadena de formato incontrolada.
- Falta autenticación y autorización (autorización incorrecta).
- Exposición de datos sensibles.
- Manejo inadecuado de errores.
Algunos de estos errores pueden provocar un bloqueo del sistema, un acceso no anticipado al sistema y la pérdida del control del software para los piratas informáticos.
Errores comunes de programación que deben evitarse
A continuación se enumeran algunos errores de programación comunes que deben evitarse:
- Neutralización incorrecta de elementos especiales utilizados en un comando SQL ('inyección SQL').
- Copia de búfer sin verificar el tamaño de la entrada ('Desbordamiento de búfer clásico').
- Falta autenticación para función crítica.
- Autorización faltante o incorrecta.
- Uso de credenciales codificadas.
- Falta el cifrado de datos confidenciales.
- Carga sin restricciones de archivos con tipo peligroso.
- Dependencia de entradas no confiables en una decisión de seguridad.
- Ejecución con privilegios innecesarios.
- Falsificación de solicitudes entre sitios (CSRF).
- Descarga de código sin verificación de integridad.
- Cálculo incorrecto del tamaño del búfer.
- Restricción inadecuada de intentos de autenticación excesivos.
- Redirección de URL a un sitio que no es de confianza ('Redireccionamiento abierto').
- Cadena de formato incontrolada.
- Uso de un hachís unidireccional sin sal.
Lista de verificación para prácticas de código seguro
Por último, pero no menos importante, después de considerar todos los puntos anteriores de los aspectos del Desarrollo de software seguro, los Desarrolladores deben seguir las Lista de verificación establecida para las prácticas de código seguro para asegurarse de que no se pierda nada. A continuación se presentan algunas, pero no una lista exhaustiva.
Validación de entrada:
- No confíe en la entrada, considere la validación de entrada centralizada.
- No confíe en la validación del lado del cliente.
- Tenga cuidado con los problemas de canonicalización.
- Restrinja, rechace y desinfecte la entrada. Validar por tipo, longitud, formato y rango.
Autenticación:
- Partición del sitio por área anónima, identificada y autenticada.
- Utilice contraseñas seguras.
- Admite períodos de caducidad de contraseñas y desactivación de cuentas.
- No almacene credenciales (use hash unidireccionales con sal).
- Cifre los canales de comunicación para proteger los tokens de autenticación.
- Pase las cookies de autenticación de formularios solo a través de conexiones HTTPS.
Autorización:
- Utilice cuentas con privilegios mínimos.
- Considere la granularidad de la autorización.
- Hacer cumplir la separación de privilegios.
- Restrinja el acceso de los usuarios a los recursos a nivel del sistema.
- Utilice el protocolo OAuth 2.0 para autenticación y autorización.
- Llevar a cabo la validación de API.
- Incluya los métodos permitidos en la lista blanca.
- Proteja las acciones privilegiadas y las colecciones de recursos sensibles.
- Protéjase contra la falsificación de recursos entre sitios (CSRF).
Gestión de sesiones:
- Cree un identificador de sesión en el servidor.
- Termine la sesión con Logoff.
- Genere una nueva sesión de reautenticación.
- Establezca el atributo 'seguro' para las cookies transmitidas a través de TLS.
Criptografía:
- Utilice criptografía mientras 'Datos en tránsito, Datos almacenados, Datos en movimiento, Integridad de mensajes'.
- No desarrolle el suyo propio. Utilice funciones de plataforma probadas.
- Mantenga los datos no cifrados cerca del algoritmo.
- Utilice el algoritmo y el tamaño de clave adecuados.
- Evite la administración de claves (use DPAPI).
- Realice un ciclo de llaves periódicamente.
- Guarde las llaves en un lugar restringido.
Registro y auditoría:
- Identifica comportamientos maliciosos.
- Sepa cómo es el buen tráfico.
- Audite y registre la actividad en todos los niveles de aplicación.
- Acceso seguro a los archivos de registro.
- Realice una copia de seguridad y analice periódicamente los archivos de registro.
Codificación de salida:
la puerta de enlace predeterminada no está disponible sigue sucediendo
- Realización de la validación de entrada (XML, JSON….).
- Utilice consulta parametrizada.
- Realice la 'validación del esquema'.
- Realizar codificación (XML, JSON ..).
- Enviar encabezados de seguridad.
Referencia: ‘ Lista de verificación de prácticas de codificación segura de OWASP (En resumen, lista de verificación de SCP) ’
Resumen tabular de la lista de verificación de codificación segura
La siguiente tabla resume los 'Cosas para recordar para el código seguro' de una aplicación.
# | ¿Qué? |
---|---|
7 | Asegurar que todo el equipo cumpla con el estándar de codificación segura. |
1 | Para entender claramente, '¿Qué es el código seguro'? |
2 | Comprender las 'fuentes de las vulnerabilidades' comunes. |
3 | Llevar a cabo una 'Sesión de sensibilización sobre seguridad' para el equipo. |
4 | Identificar y analizar 'Riesgos y Valores' involucrados en la aplicación y métodos para 'Mitigar'. |
5 | 'Formar al equipo' en estándares de codificación segura, mejores prácticas y directrices. |
6 | Para definir 'Estándar de codificación segura' |
8 | Utilizar el 'lenguaje fácil de implementar' y tener un 'conocimiento profundo' del mismo. |
9 | Para utilizar las herramientas IDE (entorno de desarrollo integrado) |
10 | Utilizar 'analizadores estáticos y dinámicos' y 'múltiples analizadores estáticos' para eliminar los 'falsos positivos' |
11 | Para llevar a cabo 'pruebas manuales' donde sea necesario para identificar el error, se pierden. |
12 | Para definir un conjunto de 'recomendaciones y reglas de codificación segura' |
13 | Para llevar a cabo 'Pruebas de cumplimiento de conformidad' para las reglas establecidas. |
14 | Comprender el 'método de codificación inseguro' y recopilar los 'errores de programación comunes'. |
15 | Seguir estrictamente la 'Lista de verificación de SCP' |
Conclusión
Esperamos que este tutorial sea su mejor guía para garantizar la seguridad del software.
Las pautas de codificación para el desarrollo de software seguro se enumeraron aquí en términos simples con ejemplos para su fácil comprensión del concepto.
¡¡Feliz lectura!!
Lectura recomendada
- Pruebas de seguridad (una guía completa)
- Las 30 MEJORES empresas de seguridad cibernética en 2021 (empresas de nivel pequeño a empresarial)
- Conceptos básicos de la programación informática para principiantes »Wiki Ùtil Tutorial de codificación
- Los 15 mejores editores de código gratuitos para una experiencia de codificación perfecta
- Tutorial de pruebas de inyección de SQL (ejemplo y prevención del ataque de inyección de SQL)
- Los desarrolladores no son buenos probadores. ¿Que dices?
- Formato del examen ISTQB Foundation y pautas para resolver trabajos
- Directrices de prueba de seguridad de aplicaciones móviles