Zakładając, że program w języku C# używa tylko zarządzanego kodu .NET, czy możliwe jest wystąpienie luki w zabezpieczeniach związanej z przepełnieniem bufora w tym programie? Jeśli tak, w jaki sposób taka luka jest możliwa?Czy exploity przepełnienia bufora są możliwe w języku C#?
Odpowiedz
Tak, ale są one znacznie trudniejsze do wyprodukowania. Możesz dostać przepełnienie bufora tylko wtedy, gdy używasz pewnych niebezpiecznych konstrukcji, a nie "normalnego" kodu C#. Kod uszkodzenia pamięci nie powinien być w ogóle możliwy, gdy twój kod działa z obniżonym zaufaniem.
Kilka możliwości przepełnienia bufora:
- Korzystanie z
unsafe
słowa kluczowego, który pozwala wskaźników. Niebezpieczny kod jest równie łatwy do złego, jak kod oparty na wskaźniku wc lub C++. - Korzystanie niebezpiecznych API, takich jak metody z klasy
Marshal
- (mono) Można wyłączyć sprawdzanie zakresu array (bezpieczeństwo vs. wydajności kompromis)
Istnieje również kilka innych sposobów do uszkodzenia pamięci oprócz przepełnień bufora.
StructLayoutKind.Explicit
- Błędne rodzime podpisy międzyoperacyjne
(Sam wykonawcze jest napisany w języku C++, więc błąd w czasie wykonywania mogą również uszkodzony pamięci lub przepełnienie bufora, ale uważam, że obecnie zakresu tego pytania)
Tylko w przypadku użycia słowa kluczowego unsafe
.
W sensie absolutnym tak, exploit buforowy jest możliwy z powodu błędów w środowisku wykonawczym .NET. Jednak .NET zapobiega większości kodów użytkownika końcowego (z wyjątkiem "niebezpiecznego" użycia) z tego rodzaju problemów, więc w rzeczywistości jest mniej ryzykowny.
W prawdziwym życiu większość takich problemów wystąpi z połączeń natywnych (dll COM itp.) Wywoływanych z kodu zarządzanego.
Tak, w środowiskach niebezpiecznych:
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c; // Bufferoverflow if s.Length > 10
}
}
"Zezwalaj niebezpieczny kod" musi być zaznaczone, aby to skompilować.
Nie można tradycyjnego przepełnienia bufora za pomocą tablicy. Sprawdza granice przed uzyskaniem dostępu do tablicy, chyba że (CLR) może zagwarantować, że jest bezpieczna.
+1 za podanie przykładu i wymienienie sprawdzenia kompilacji. –
To jest trochę niepoprawne - stackalloc nie pozwoli na przepełnienie bufora. –
- 1. Konsekwencje tego przepełnienia bufora?
- 2. Czy tablice oparte na stosie są możliwe w języku C#?
- 3. przepełnienia bufora jak homeowrk
- 4. Przerwij pułapkę zamiast przepełnienia bufora
- 5. Czy można zastąpić% eax za pomocą przepełnienia bufora?
- 6. GCC sposób wykrywania przepełnienia bufora stosu
- 7. Czy jest możliwe utworzenie System.Int32 w języku C#?
- 8. Czy jest możliwe utworzenie nowego operatora w języku C#?
- 9. Czy jest możliwe generowanie złożonych dźwięków w języku C#?
- 10. Korzystanie z przepełnienia bufora w celu wykonania kodu powłoki
- 11. Jakie są objawy przepełnienia stosu w programie C++?
- 12. Najlepszy sposób obsługi przepełnienia Integer w C#?
- 13. Sprawdzanie niedopełnienia/przepełnienia w C++?
- 14. Czy jest możliwe dołączenie domyślnego bufora renderowania do pliku FBO?
- 15. Czy anonimowe typy w języku C# są dostępne poprzez odbicie?
- 16. Czy możliwe jest wyspecjalizowanie szablonu w języku powiązania?
- 17. Czy filtry niestandardowe w NUnit są możliwe?
- 18. Jakie są konwencje nazewnictwa w języku C#?
- 19. Czy możliwe jest obliczanie bufora TensorFlow (pod) wykresu?
- 20. W języku C# są obiekty Lambda Expressions?
- 21. Highcharts: czy możliwe są różne legendy?
- 22. Czy typy nieskończone (inaczej typy rekursywne) nie są możliwe w języku F #?
- 23. Czy możliwe są teksty w języku innym niż angielski w paski?
- 24. C: Co to jest/przykład niedopełnienia bufora?
- 25. Czy możliwe są asynchroniczne zapytania modelu Django?
- 26. Czy są możliwe testy typu rodzinnego?
- 27. Czy możliwe jest wykonanie modułu w języku Python?
- 28. W języku C++ możliwe jest zdefiniowanie funkcji czysto wirtualnej?
- 29. Czy możliwe jest rozszerzenie tablic w C#?
- 30. Czy możliwe jest przeciążenie operatorów w C?
Przepełnienie bufora w klasycznym sensie, czy też jakikolwiek rodzaj exploita przepełnienia bufora? – Dykam
Sprawdź słowa kluczowe "niezaznaczone" i "niebezpieczne". –
@Dykam: w sensie exploita. – poke