¿Cuáles son todos los conceptos de programación de bajo nivel que debo conocer para la investigación de seguridad y la programación en C?

Seguridad eh?

Mi valor de 2c, probablemente menos valioso que los electrones consumidos …

Si desea ‘obtener’ seguridad, los bits menos importantes son los “conceptos de programación de bajo nivel” (a pesar de un requisito absoluto de que usted sea muy capaz en estos). Mucho más importante es una sólida “filosofía de seguridad” que incorpora una comprensión profunda de cómo la seguridad se trata principalmente de las personas . Aunque crítico, la ingeniería es menos importante. Pero tal vez lo sepas.

Tres pensamientos adicionales:

  1. La seguridad es endiabladamente difícil de corregir. Los “expertos” habitualmente se equivocan. Asigne aproximadamente 10–20 años a la tarea de volverse vagamente capaz. (No, incluso si eres un genio, ¡no hay atajos!)
  2. Podría hacerlo peor que comenzar con los textos accesibles de Bruce Schneier Criptografía aplicada o Ingeniería de criptografía, pero esto no lo convertirá en un criptógrafo. Si habla en serio, es probable que necesite buscar expertos en el campo y molestarlos. Y pase grandes cantidades de tiempo leyendo manuales oscuros, y explorando y codificando.
  3. Pero si quieres aprender una sola cosa, aprende el principio de Kerckhoffs.

Mi impresión es que Kerckhoffs es el pons asinorum de la criptografía. Si alguna persona brillante le dice que su sistema es seguro porque funciona con principios secretos que no le revelarán, inmediatamente sabrá que (a) tienen una buena mierda: toda la información sobre criptografía; (b) su sistema no es seguro; (c) han preparado todos los elementos básicos, invariablemente ; * y (d) su seguridad no solo es defectuosa sino que puede y nunca será reparada .

Jo

* Mientras escribo esto, sé que alguien “me pondrá en mi lugar” por decir “invariablemente”. Sí, este es uno de los pocos lugares en todo el universo de hechos donde uno puede decir “invariablemente”, y estar en lo correcto.

xkcd: seguridad

No soy un investigador de seguridad, así que aquí tengo mi comprensión del asunto desde un punto de vista de programación defensiva.

  • Acceso a memoria arbitraria.
  • Convocatoria de convenciones en al menos una arquitectura y sistema operativo.
  • Cómo explotar dicha convención de llamadas con un desbordamiento de búfer y saber cuándo tal cosa está protegida contra los canarios.
  • Código de inyección y dónde puede fallar. Cosas como descargas de caché de instrucciones L1, protección de escritura / ejecución de hardware.
  • Inyección indirecta de código, como la manipulación de punteros vtable en c ++.
  • Uso de bases de datos de exploits como metasploit.

A2A –

Necesita tener una dosis saludable de paranoia. Mucha seguridad se trata de seguridad física y también de ingeniería social.

Podría hacerlo si aún no ha estudiado el análisis de riesgos y la mitigación de riesgos. Nada puede ser completamente asegurado. Y podría gastar una empresa en bancarrota para asegurar toda su propiedad intelectual. Entonces, algo de esto se trata de cuánta seguridad es práctica a qué costo. Agregue a eso una necesidad de accesibilidad. Un sistema que no tiene acceso a Internet es más seguro, pero a qué costo si sus clientes potenciales no pueden encontrar sus servicios.