Suponiendo que un programa C# usa solo código .NET administrado, ¿es posible tener una vulnerabilidad de seguridad de desbordamiento del búfer dentro de ese programa? De ser así, ¿cómo sería posible tal vulnerabilidad?¿Son posibles exploits de desbordamiento de búfer en C#?
Respuesta
Sí, pero son mucho más difíciles de producir. Solo puede obtener desbordamientos de búfer si utiliza ciertas construcciones inseguras, y no con el código "normal" de C#. El código de corrupción de memoria no debería ser posible en absoluto, cuando su código se ejecuta con una confianza reducida.
Unas posibilidades de desbordamientos de búfer:
- usando la palabra clave
unsafe
, que permite a los punteros. El código no seguro es tan fácil de equivocarse, como el código basado en puntero en c o C++. - Utilización de las API inseguras, tales como los métodos de la clase
Marshal
- (Mono) Puede desactivar la comprobación de rango de matriz (seguridad frente a los resultados del comercio-off)
También hay algunas otras maneras para corromper la memoria aparte de los desbordamientos del búfer.
StructLayoutKind.Explicit
- erróneos firmas de interoperabilidad nativa
(El tiempo de ejecución en sí está escrito en C++, por lo que un error en el tiempo de ejecución puede memoria también corruptos o desbordar un buffer, pero considero que fuera de alcance para esta pregunta)
Solo si utiliza la palabra clave unsafe
.
En un sentido absoluto, sí es posible un aprovechamiento de memoria intermedia debido a errores en el tiempo de ejecución de .NET. Sin embargo, .NET evita la mayoría del código de usuario final (excepto el uso "inseguro") de este tipo de problemas, por lo que en la vida real es menos riesgoso.
En la vida real, la mayoría de los problemas como este ocurrirán a partir de llamadas nativas (COM dlls, etc.) invocadas desde el código administrado.
Sí, en entornos no seguros:
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c; // Bufferoverflow if s.Length > 10
}
}
"Permitir código no seguro" tiene que ser revisado para que esto se compila.
No puede un desbordamiento de búfer tradicional con una matriz. Hará comprobación de límites antes de acceder a una matriz a menos que (CLR) pueda garantizar que es segura.
+1 para dar un ejemplo y mencionar el control de compilación. –
Esto es algo incorrecto: stackalloc no le permitirá desbordamiento de búfer. –
- 1. C# creación de desbordamiento de búfer
- 2. Dillema con desbordamiento de búfer
- 3. número de posibles combinaciones son posibles
- 4. ¿Cuáles son algunos de los recursos avanzados y modernos en la escritura de exploits?
- 5. ¿Son posibles las Listas bidimensionales en C#?
- 6. ¿Son posibles los typedef condicionales en C++?
- 7. Consecuencias de este desbordamiento de búfer?
- 8. dbms_output desbordamiento de búfer de tamaño
- 9. Es posible el desbordamiento/desbordamiento del búfer en la aplicación web asp.net C# completamente administrada
- 10. Abortar trampa en lugar de desbordamiento de búfer
- 11. ¿Es posible el desbordamiento de búfer de PHP?
- 12. ¿Son posibles las matrices basadas en la pila en C#?
- 13. ¿Son posibles múltiples auto tipos?
- 14. ¿Cómo prevenir el desbordamiento del búfer memcpy?
- 15. ¿Cómo puedo invocar el desbordamiento del búfer?
- 16. son rangos posibles con enumeraciones?
- 17. La declaración codificada std :: string provoca desbordamiento de búfer
- 18. Programa de explotación de desbordamiento de búfer intencional
- 19. ejemplo de desbordamiento de búfer del libro Art of Exploitation
- 20. ¿Son posibles los operadores variables?
- 21. ¿Son posibles las plantillas de datos recursivas?
- 22. ¿Cuántos UID son posibles en Android?
- 23. son para bucles posibles en babas?
- 24. ¿Son posibles los filtros personalizados en NUnit?
- 25. ¿Son posibles matrices inmutables en .NET?
- 26. ¿Son posibles las constantes privadas en PHP?
- 27. C++ desbordamiento de pila
- 28. Explotación de desbordamiento de pila en C
- 29. ¿Son posibles los ataques de inyección SQL en JPA?
- 30. Extraño C# error de desbordamiento
Desbordamiento de búfer en el sentido clásico, o cualquier tipo de aprovechamiento de desbordamiento de búfer? – Dykam
Echa un vistazo a las palabras clave 'no verificada' y' insegura'. –
@Dykam: En el sentido de un exploit. – poke