
Standardmäßig ist die RAM-Menge, auf die Anwendungen beim Ausführen zugreifen dürfen, begrenzt, oder? Technisch gesehen konnte mein VLC nicht auf die von Chrome verwendeten Speicheradressen zugreifen. Aber wie ist es möglich, dass das Betriebssystem/der Compiler fälschlicherweise den Zugriff auf eine Adresse zulässt, für die ein Code nicht zulässig ist? Ich weiß, dass viele „Exploits“ und „Payloads“ diese Tatsache ausnutzen und Variablen erstellen, die zu viel Platz beanspruchen und in andere Adressen „überlaufen“, aber wie passiert das eigentlich?
Sind manche Programme dafür anfälliger als andere? Spielt es eine Rolle, in welcher Sprache sie codiert sind? Ich weiß beispielsweise, dass man in C mit dem Speicher herumspielen darf, in Java hingegen nicht.
Und was sind die Vorteile davon? Was wäre, wenn jemand Schadcode schreiben würde, um auf eine Stelle im Speicher zuzugreifen? Das Einzige, was mir einfällt, sind im RAM gespeicherte Passwörter/Schlüssel.
PSIch habe darüber nachgedacht, dies in Stack Overflow zu stellen, aber meine Frage ist viel umfassender und bezieht sich nicht nur speziell auf die Programmierperspektive. Wenn ich sie an der falschen Stelle platziert habe, tut es mir leid.
Antwort1
Merkwürdigerweise handelt es sich dabei um einen Überlauf - einenPaketüberfluss- Verwendung eines sorgfältig ausgearbeiteten Prozesses, um mehr Speicherplatz zu beanspruchen, als vorgesehen ist, um das Verhalten eines Zielprogramms zu ändern oder es zum Absturz zu bringen
Antwort2
Ein spezieller Punkt: Die „Überläufe“, die normalerweise von Interesse sind, erlauben es einer Anwendung (einem Prozess) nicht, eine andere zu überschreiben; vielmehr sind es nur die Daten, die der Prozess verarbeitet, was dazu führt, dass das Programm Teile von sich selbst (normalerweise den Stapel, möglicherweise indirekt) mit diesen Daten überschreibt, was dann die Übernahme vondieser Prozess.
Dann kann dieser Prozess über normale IPC- und Systemaufrufe interagieren und alles andere übernehmen, worauf Ihr Konto Zugriff hat. VLC kann nicht mit einer normalen Adresse auf den Speicherplatz von Chrome zugreifen, aber esdürfen:
- Geben Sie sich als Debugger aus, hängen Sie sich an den Chrome-Prozess an und ändern Sie ihn.
- Schreiben Sie alle Ihre Dateien und Kontoeinstellungen neu, sodass der Code künftig bei jeder Anmeldung ausgeführt wird.
- Öffnet Netzwerkverbindungen und verbreitet sich auf andere Computer.
Mit einigen Ausnahmen gehen moderne Betriebssysteme leider davon aus, dass Sie jedem Programm, das Sie ausführen, mit allem, was in Ihrem Konto ist, vollkommen vertrauen. Diese Annahme gilt seit den Tagen nicht vernetzter Time-Sharing-Systeme, die ausschließlich von Experten verwendet wurden (wo die vom Betriebssystem bereitgestellten Schutzmechanismenschützten die Benutzer voreinander, nicht aus ihrer eigenen Software).