Supponendo che un programma C# utilizzi solo codice .NET gestito, è possibile avere una vulnerabilità di sicurezza di buffer overflow all'interno di quel programma? In tal caso, in che modo tale vulnerabilità sarebbe possibile?Gli exploit di overflow del buffer sono possibili in C#?
risposta
Sì, ma sono molto più difficili da produrre. È possibile ottenere buffer overflow solo se si utilizzano determinati costrutti non sicuri e non con il codice C# "normale". Il codice di corruzione della memoria non dovrebbe essere possibile, quando il codice è in esecuzione con un trust ridotto.
Qualche possibilità di buffer overflow:
- utilizzando la parola chiave
unsafe
, che permette di puntatori. Il codice non sicuro è altrettanto facile da sbagliare, come il codice basato su puntatore in c o C++. - Utilizzando le API non sicuri, come ad esempio i metodi della classe
Marshal
- (mono) È possibile disattivare il controllo intervallo di matrice (sicurezza contro le prestazioni trade-off)
ci sono anche alcuni altri modi per danneggiare la memoria a parte i buffer overflow.
StructLayoutKind.Explicit
- errati firme di interoperabilità nativa
(Il runtime stesso è scritto in C++, in modo da un bug nel runtime può memoria anche corrotto o un buffer overflow, ma ritengo che fuori del campo di applicazione di questa domanda)
Solo se si utilizza la parola chiave unsafe
.
In un senso assoluto, sì un exploit di buffer è possibile a causa di errori nel runtime .NET. Tuttavia, .NET previene la maggior parte del codice utente finale (tranne l'utilizzo "non sicuro") da questi tipi di problemi, quindi nella vita reale è meno rischioso.
Nella vita reale, la maggior parte dei problemi di questo tipo si verificano dalle chiamate native (DLL COM ecc.) Richiamate dal codice gestito.
Sì, in ambienti non sicuri:
unsafe void bufferOverflow(string s)
{
char* ptr = stackalloc char[10];
foreach (var c in s)
{
*ptr++ = c; // Bufferoverflow if s.Length > 10
}
}
"Consenti codice non sicuro" deve essere controllato per questo compilare.
Non è possibile un buffer overflow tradizionale con un array. Effettua il controllo dei limiti prima di accedere a un array, a meno che (CLR) possa garantire che sia sicuro.
+1 per fornire un esempio e menzionare il controllo di compilazione. –
Questo è un po 'errato - Stackalloc non ti permetterà di bufferare l'overflow. –
- 1. Esempio di exploit buffer overflow
- 2. Overflow del buffer come homeowrk
- 3. Attacco di overflow del buffer
- 4. Buffer Overflow non funzionante
- 5. Gli array basati su stack sono possibili in C#?
- 6. Quali sono gli usi del buffer circolare?
- 7. Programma di sfruttamento del buffer overflow intenzionale
- 8. esempio di overflow del buffer dal libro Art of Exploitation
- 9. dbms_output size buffer overflow
- 10. AudioRecord: buffer overflow?
- 11. Gli alias di tipo generico sono possibili in TypeScript?
- 12. Gli attacchi di SQL injection sono possibili in JPA?
- 13. Dillema con buffer overflow
- 14. Dichiarare hardcoded std :: string causa di overflow del buffer
- 15. Quale strumento può catturare buffer overflow in C?
- 16. Ottenere SIGILL quando si cerca di eseguire del buffer overflow
- 17. Sono possibili più parametri "param"?
- 18. Gli array di lunghezza variabile sono possibili con Javascript
- 19. Buffer del protocollo di Google in C#
- 20. Come funziona un buffer di socket Linux in overflow?
- 21. Cosa sono i campionatori di ombre in OpenGL e quali sono gli usi possibili per loro?
- 22. Sono possibili DataTemplates ricorsivi?
- 23. KryoException: buffer overflow con input molto piccolo
- 24. C: Che cos'è un/esempio di un underflow del buffer?
- 25. Gli effetti collaterali sono possibili nella pura programmazione funzionale
- 26. Quali sono gli stati possibili per un contenitore docker?
- 27. Compilare C per consentire l'overflow del buffer
- 28. Differenza tra - buffer overflow e return in libc attack
- 29. Highcharts: sono possibili più leggende?
- 30. Go: sono possibili intervalli nidificati?
Overflow del buffer nel senso classico o qualsiasi tipo di sfruttamento del buffer overflow? – Dykam
Controlla le parole chiave 'unchecked' e' unssafe'. –
@Dykam: Nel senso di un exploit. – poke