Предполагая, что программа на C# использует только управляемый код .NET, возможно ли иметь уязвимость безопасности переполнения буфера в этой программе? Если да, то как такая уязвимость будет возможна?Возможно ли использование переполнения буфера в C#?
ответ
Да, но их гораздо труднее производить. Вы можете получить только переполнение буфера, если используете определенные небезопасные конструкции, а не «обычный» код C#. Код повреждения памяти не должен быть вообще возможен, когда ваш код работает с пониженным доверием.
Несколько возможностей для переполнения буфера:
- Использование
unsafe
ключевого слова, что позволяет указатели. Небезопасный код так же легко ошибиться, как код на основе указателя в c или C++. - Использования небезопасного API, такие как методы из
Marshal
класса - (Mono) Вы можете отключить проверку диапазона массива (безопасность против производительности компромисса)
Есть также несколько других способов повреждать память, кроме переполнения буфера.
StructLayoutKind.Explicit
- Неправильные родной подписи Interop
(сама среда написана на C++, так что ошибка во время выполнения также может повредить память или переполнение буфера, но я считаю, что из сфера охвата по этому вопросу)
Только, если вы используете ключевое слово unsafe
.
В абсолютном смысле да, использование буфера возможно из-за ошибок в среде выполнения .NET. Однако .NET предотвращает большинство кодов конечных пользователей (за исключением «небезопасного» использования) из этих видов проблем, поэтому в реальной жизни это менее рискованно.
В реальной жизни большинство проблем, подобных этому, будут возникать из-за собственных вызовов (COM-DLL и т. Д.), Вызванных из управляемого кода.
Да, в небезопасных условиях:
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c; // Bufferoverflow if s.Length > 10
}
}
«Разрешить небезопасный код» должен быть проверен на это скомпилировать.
Вы не можете использовать традиционный переполнение буфера массивом. Он будет проверять границы перед доступом к массиву, если только он (CLR) не гарантирует, что он безопасен.
+1 для предоставления примера и упоминания проверки компиляции. –
Это несколько некорректно: stackalloc не позволяет переполнять буфер. –
- 1. Использование переполнения буфера
- 2. C# создания переполнения буфера
- 3. C - Детали переполнения буфера
- 4. Предотвращение переполнения буфера в C
- 5. Компиляция C для переполнения буфера
- 6. Ошибка переполнения переполнения буфера
- 7. Длина буфера переполнения буфера
- 8. Использование cin в C++ с шириной(), чтобы избежать переполнения буфера
- 9. Возможно ли переписать% eax с использованием переполнения буфера?
- 10. C переполнение буфера переполнения программирования
- 11. Использование snprintf, чтобы избежать переполнения буфера
- 12. Безопасен ли QString в отношении переполнения буфера?
- 13. Создание переполнения буфера malloc() в C
- 14. Проверка переполнения буфера ввода
- 15. Использование gdb для использования буфера-переполнения
- 16. Использование переполнения буфера для печати конкретного текста
- 17. Просматривает ли чтение извне буфера в качестве переполнения буфера?
- 18. Исключение переполнения кучи/буфера
- 19. Использование snprintf для предотвращения переполнения буфера
- 20. переполнения буфера не произошло
- 21. Пример использования переполнения буфера
- 22. C: Что такое пример переполнения буфера?
- 23. Проверка переполнения буфера
- 24. переполнения буфера - Изменения переменных
- 25. Exploit переполнения буфера
- 26. Последствия этого переполнения буфера?
- 27. Реализация переполнения буфера
- 28. вызов переполнения буфера переадресации вызова
- 29. Иллюстрация переполнения буфера для студентов (linux, C)
- 30. Является ли это примером переполнения буфера?
Переполнение буфера в классическом смысле или просто какой-либо эксплойт переполнения буфера? – Dykam
Проверьте ключевые слова 'unchecked' и' unsafe'. –
@ Dykam: В смысле эксплойта. – poke