investopedia - security stock inventory
¿Qué debe saber cada programador sobre seguridad? (17)
- Por qué es importante.
- Se trata de compensaciones.
- La criptografía es en gran medida una distracción de la seguridad.
Soy un estudiante de informática y ahora estoy en el 3er año en la universidad. Hasta ahora hemos estado estudiando muchos temas relacionados con las computadoras en general (programación, algoritmos, arquitectura de computadoras, matemáticas, etc.).
Estoy muy seguro de que nadie puede aprender todo sobre seguridad, pero estoy seguro de que hay un conocimiento "mínimo" que todo programador o estudiante de TI debería saber al respecto y mi pregunta es ¿cuál es este conocimiento mínimo?
¿Puede sugerir algunos libros electrónicos o cursos o algo puede ayudar a comenzar con este camino?
El equipo de seguridad web de Mozilla creó una gran guía , que cumplimos en el desarrollo de nuestros sitios y servicios.
La importancia de los valores predeterminados seguros en marcos y API:
- Muchos de los primeros frameworks web no escaparon de html por defecto en las plantillas y tuvieron problemas de XSS debido a esto
- Muchos de los primeros frameworks web hicieron que sea más fácil concatenar SQL que crear consultas parametrizadas que conducen a muchos errores de inyección de SQL.
- Algunas versiones de Erlang (R13B, tal vez otras) no verifican los certificados ssl peer de forma predeterminada y probablemente hay muchos códigos de erlang que son susceptibles a los ataques SSL MITM
- El transformador XSLT de Java por defecto permite la ejecución de código java arbitrario. Ha habido muchos errores de seguridad graves creados por esto.
- Las API de análisis XML de Java permiten por defecto que el documento analizado lea archivos arbitrarios en el sistema de archivos. Más diversión :)
Para obtener información general sobre seguridad, recomiendo encarecidamente leer Bruce Schneier . Tiene un sitio web, su boletín criptográfico , varios books y ha realizado muchas interviews .
También me familiarizaría con la ingeniería social (y Kevin Mitnick ).
Para un buen (y bastante entretenido) libro sobre cómo funciona la seguridad en el mundo real, recomendaría el excelente (aunque un poco anticuado) ''The Cuckoo''s Egg'' de Cliff Stoll.
Principios a tener en cuenta si desea que sus aplicaciones sean seguras:
- Nunca confíes en ninguna entrada!
- Valide las entradas de todas las fuentes que no sean de confianza: use listas blancas, no listas negras
- Planifique la seguridad desde el principio: no es algo que pueda utilizar al final
- Manténgalo simple: la complejidad aumenta la probabilidad de agujeros de seguridad
- Mantenga su ataque a la superficie al mínimo
- Asegúrate de fallar de forma segura
- Usa la defensa en profundidad
- Adherirse al principio de privilegio mínimo.
- Usar modelado de amenazas
- Compartmentalize - para que su sistema no sea todo o nada.
- Ocultar secretos es difícil, y los secretos ocultos en el código no se mantendrán en secreto por mucho tiempo
- No escribas tu propio cripto
- Usar crypto no significa que estés seguro (los atacantes buscarán un enlace más débil)
- Tenga en cuenta los desbordamientos de búfer y cómo protegerse contra ellos
Hay algunos libros y artículos excelentes en línea sobre cómo asegurar sus aplicaciones:
- Escribiendo Secure Code 2nd Edition - Creo que todos los programadores deberían leer esto
- Creación de software seguro: cómo evitar problemas de seguridad de la manera correcta
- Libro de cocina de programación segura
- Explotando software
- Ingeniería de seguridad - una excelente lectura
- Programación segura para Linux y Unix HOWTO
Entrena a tus desarrolladores en las mejores prácticas de seguridad de aplicaciones.
Codebashing (pagado)
Innovación en Seguridad (pagada)
Brújula de seguridad (pagado)
OWASP WebGoat (gratis)
Regla n. ° 1 de seguridad para programadores: no hagas tu propio rollo.
A menos que sea usted mismo un experto en seguridad y / o criptógrafo, utilice siempre una plataforma de seguridad, marco o biblioteca bien diseñada, bien probada y madura para hacer el trabajo por usted. Estas cosas han pasado años siendo pensadas, parcheadas, actualizadas y examinadas por expertos y hackers por igual. Quieres obtener esas ventajas, no descartarlas al intentar reinventar la rueda.
Ahora, eso no quiere decir que no necesite aprender nada sobre seguridad. Ciertamente, necesita saber lo suficiente para comprender lo que está haciendo y asegurarse de estar usando las herramientas correctamente. Sin embargo, si alguna vez se dispone a comenzar a escribir su propio algoritmo de criptografía, sistema de autenticación, desinfectante de entrada, etc., deténgase, retroceda un paso y recuerde la regla # 1.
Sal y hash las contraseñas de tus usuarios. Nunca los guarde en texto plano en su base de datos.
Solo quería compartir esto para los desarrolladores web:
Guia de seguridad para desarrolladores
https://github.com/FallibleInc/security-guide-for-developers
Sugiero revisar los 25 errores de programación más peligrosos de CWE / SANS . Se actualizó para 2010 con la promesa de actualizaciones periódicas en el futuro. La revisión de 2009 está disponible.
De http://cwe.mitre.org/top25/index.html
Los 10 errores de programación más peligrosos de CWE / SANS de 2010 son una lista de los errores de programación más generalizados y críticos que pueden provocar graves vulnerabilidades de software. A menudo son fáciles de encontrar y de explotar. Son peligrosos porque con frecuencia permitirán que los atacantes se apoderen completamente del software, roben datos o eviten que el software funcione en absoluto.
La lista de los 25 principales es una herramienta de educación y concientización para ayudar a los programadores a prevenir los tipos de vulnerabilidades que afectan a la industria del software, al identificar y evitar los errores demasiado comunes que se producen antes de que se envíe el software. Los clientes de software pueden usar la misma lista para ayudarles a solicitar un software más seguro. Los investigadores en seguridad de software pueden usar el Top 25 para centrarse en un subconjunto estrecho pero importante de todas las debilidades de seguridad conocidas. Finalmente, los administradores de software y los CIO pueden usar la lista de los 25 principales como una medida de progreso en sus esfuerzos por proteger su software.
También asegúrese de revisar la lista de las 10 principales de OWASP para una categorización de todos los principales vectores / vulnerabilidades de ataque.
Estas cosas son fascinantes de leer. Aprender a pensar como un atacante te enseñará qué pensar mientras escribes tu propio código.
Un buen curso de iniciación podría ser el curso MIT en redes de computadoras y seguridad . Una cosa que sugeriría es no olvidar la privacidad. La privacidad, en algunos sentidos, es realmente fundamental para la seguridad y no suele cubrirse en cursos técnicos sobre seguridad. Es posible que encuentre algún material sobre la privacidad en este curso sobre Ética y la Ley en relación con Internet.
Usted debe saber acerca de las tres A''s. Autenticación, Autorización, Auditoría. El error clásico es autenticar a un usuario, mientras que no se comprueba si el usuario está autorizado para realizar alguna acción, por lo que un usuario puede ver las fotos privadas de otros usuarios, el error que hizo Diaspora. Muchas, muchas más personas se olvidan de la auditoría, necesita, en un sistema seguro, poder decir quién hizo qué y cuándo.
Yo añadiría lo siguiente:
- Cómo funcionan las firmas digitales y los certificados digitales
- Lo que es sandboxing
Comprender cómo funcionan los diferentes vectores de ataque:
- Desbordamientos de búfer / desbordamientos / etc en el código nativo
- Ingenieria social
- Falsificación de DNS
- Hombre en el medio
- CSRF / XSS et al
- inyección SQL
- Ataques criptográficos (por ejemplo, explotando algoritmos criptográficos débiles como DES)
- Errores de programa / marco (por ejemplo: la latest falla de seguridad de github)
Puedes fácilmente buscar en Google para todo esto. Esto te dará una buena base. Si desea ver las vulnerabilidades de las aplicaciones web, hay un proyecto llamado google gruyere que le muestra cómo explotar una aplicación web que funcione.
cuando esté construyendo cualquier empresa o su propio software, debe pensar como un hacker. Como sabemos, los hackers tampoco son expertos en todas las cosas, pero cuando encuentran alguna vulnerabilidad, comienzan a profundizar en ella reuniendo información sobre todos Las cosas y finalmente atacar en nuestro software. Para prevenir tales ataques, debemos seguir algunas reglas bien conocidas como:
- siempre intenta romper tus códigos (usa las hojas de trucos y busca las cosas en Google para obtener más información).
- ser actualizado para fallas de seguridad en su campo de programación.
- y como se mencionó anteriormente nunca confíe en ningún tipo de usuario o entradas automatizadas.
- Utilice aplicaciones de código abierto (sus fallas de seguridad más conocidas y resueltas).
Puede encontrar más recursos de seguridad en los siguientes enlaces:
- seguridad de la avispa
- Seguridad CERT
- Seguridad SANS
- netcraft
- SecuritySpace
- openwall
- PHP Sec
- thehackernews (mantente actualizado)
Para más información, google acerca de los flujos de seguridad de su proveedor de aplicaciones.
Cada programador debe saber escribir código de exploit.
Sin saber cómo se explotan los sistemas, accidentalmente se están deteniendo las vulnerabilidades. Saber cómo aplicar un código de parche no tiene ningún sentido a menos que sepa cómo probar sus parches. La seguridad no es solo un montón de experimentos de pensamiento, debes ser científico y probar tus experimentos.
La seguridad es un proceso, no un producto.
Muchos parecen olvidarse de este hecho obvio.
- Recuerde que usted (el programador) tiene que asegurar todas las partes, pero el atacante solo tiene que tener éxito en encontrar una torcedura en su armadura.
- La seguridad es un ejemplo de "incógnitas desconocidas". A veces no sabrás cuáles son los posibles fallos de seguridad (hasta después).
- La diferencia entre un error y un agujero de seguridad depende de la inteligencia del atacante.