Exploits und der EIP

Also Leute,

eine Sache verstehe ich noch nicht ganz. Es gibt ja ganz unterschiedliche Arten von Exploits: Es gibt z.B. Exploits, die bringen ein Programm zum Crashen (wie z.B. der hier) und dann gibt es da noch Exploits, bei denen kann man Kontrolle über ein Programm bekommen bzw. über ein Betriebssystem.

Soweit ich bisher verstanden habe, ist es üblicherweise das Ziel eines Exploits, den EIP / RIP (also die Addresse, auf die der Instruktionszeiger zeigt) zu kontrollieren und zu manipulieren, so dass dieser auf die Adresse zeigt, in der der Schadcode / Exploit liegt und somit dieser ausgeführt wird.

Nun ist es doch so, dass moderne Betriebssystem wie Linux oder Windows einen gewissen Schutz haben, wie z.B. die dass der ausführbare Teil eines Programms bei jedem Neustart in einem zufälligen Bereich geladen wird (sodass z.B. der Angreifer die Addresse zum Instruktionszeiger nicht festlegen kann) oder dass der Stack nicht ausführbar ist etc.

Ja wenn dem so ist, dann frage ich mich, warum es Leute gibt, die immer noch nach Fehlern wie einem Bufferoverflow suchen. Ich meine, kann man heutzutage mit Hilfe eines einfachen Buffer overflows in einem normalen Linux oder Windows Betriebssystem Kontrolle über einen Rechner erlangen, wo doch alles zufällig ist (ist ja standardmäßig aktiviert)?

Und wenn ja, worauf basieren moderne Exploits?
 
Es ist ja auch weniger der Buffer Overflow der den Exploit streng genommen ermöglicht - sondern wie das System konkret damit umgeht.

In den meisten Fällen nutzt man zudem die bereits vom OS gewährten executable Rechte des Prozesses aus - welchem der Overflow passiert. Durch Fremdcode einschleusung kann man (ein wenig try&error und Raten im Bezug auf die Struktur des source codes vorausgesetzt) so einen ausnutzbaren Exploit basteln.

Meine Programmierkentnisse halten sich eher in Grenzen (Exploits sowieso) aber so hab ich das immer verstanden.

https://www.eecis.udel.edu/~bmiller/cis459/2007s/readings/buff-overflow.html
scheint ein guter Einstieg zu sein
 
Ja wenn dem so ist, dann frage ich mich, warum es Leute gibt, die immer noch nach Fehlern wie einem Bufferoverflow suchen. Ich meine, kann man heutzutage mit Hilfe eines einfachen Buffer overflows in einem normalen Linux oder Windows Betriebssystem Kontrolle über einen Rechner erlangen, wo doch alles zufällig ist (ist ja standardmäßig aktiviert)?
?
*hust*
https://insights.sei.cmu.edu/cert/2014/02/-taking-control-of-linux-exploit-mitigations.html
Sprich: wenn auch nur eine Bibliothek nicht mitspielt, hat man/frau eine feste Adresse im Adressraum der Anwendung.

Btw: unter Windows waren z.B die DLLs von etlichen "Security-Suiten" dafür "berühmt":
http://mincore.c9x.org/breaking_av_software.pdf (Folie 35, 49, 55 usw. - einfach nach ASLR im Dokument suchen)
die ihre nicht-ASLR-fähigen DLLs in alle anderen Anwendungen injizierten ;)
Unter *nix-like gibt es auch so einige Ecken und Kanten (wenn es auch natürlich "hardened" Versionen gibt) - siehe den ersten Link.
 
Zuletzt bearbeitet:
Es gibt auch diverse Lücken, die es einem erlauben vom Speicher Adressen zu lesen, die nicht für einen selbst bestimmt sind.
Überschreibe z.B. den NULL-Terminator eines Strings mit einem beliebigen Zeichen und mit etwas Glück schreibt die Anwendung dir ein paar nützliche Speicheradressen zurück. :wink:

Hier gibt es eine ganz nette Übersicht:

image_thumb.png




https://www.fireeye.com/blog/threat...s-apocalypse-in-lately-zero-day-exploits.html
 
@+++ATH0: Ich schau mir das morgen mal an, da es jetzt mittlerweile zu spät ist. ;)

Was ich auch grad gefunden habe, ist dieser Link hier. Kurzfassung: Im Bereich des Personal Computers sind die Betriebssysteme "erwachsener" geworden, d.h. es gibt einige Schutzmechanismen gegen z.B. Pufferüberläufe.

Wenn man sich aber z.B. eingebettete Systeme anschaut, dann gibt es dort noch sehr viel Nachholbedarf, weil es dort sehr viel einfacher ist, Pufferüberläufe auszunutzen, wegen den fehlenden Schutzmechanismen, die PC-Betriebssysteme mittlerweile eingebaut haben.

Was meint ihr dazu ?
 
Zurück
Oben