Buffer Overruns

Newcomer - Board
Verfügbare Informationen zu "Buffer Overruns"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: 4dministr4t0r
  • Forum: Newcomer - Board
  • Forenbeschreibung: Forum für alle "Newcomer" (Alter, Geschlecht etc. egal), die sich im Bereich Systemsicherheit weiterbilden wollen. Chatten könnt Ihr am Ende der Seite!
  • aus dem Unterforum: Tutorials (Info-Texte)
  • Antworten: 1
  • Forum gestartet am: Samstag 23.12.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Buffer Overruns
  • Letzte Antwort: vor 17 Jahren, 4 Monaten, 1 Tag, 9 Stunden, 46 Minuten
  • Alle Beiträge und Antworten zu "Buffer Overruns"

    Re: Buffer Overruns

    4dministr4t0r - 25.12.2006, 20:49

    Buffer Overruns
    ##############################################################################################

    Alle hier geposteten Tutorials sind im www zu finden und nicht von mir. Sie werden unverändert hier dargestellt.

    Wir weisen ausdrücklich darauf hin, daß wir mit dieser Ansammlung nicht zu Straftaten aufrufen oder animieren wollen!!!
    Alle Tutorials dienen ausschließlich zu Informationszwecken.

    Solltest Du ein von Dir erstelltes Tutorial hier finden und mit der Veröffentlichung bei Hackressort nicht einverstanden sein, schick mir eine PM oder Email.

    Das Tutorial wird dann entfernt.

    Hackressort-Team

    ##############################################################################################


    Einleitung:
    hi,
    Heute gehts um ein spezielles Thema was man verstanden haben muss um selber auf Exploit jagdt zu gehen ... naja da muss man noch ein haufen mehr wissen , aber damit ihr /ich auch mal das Gefühl bekomme was so ein Bufferoverrun überhaupt is habe ich das TUT geschrieben habe auch viel zu dem Thema gelesen :) und das wesentliche zusammengefasst !!!

    Inhaltsverzeichnis
    Was passiert bei einem Bufferoverrun ?
    Die Gefahren der Bufferoveruns
    Probleme beim Software erstellen
    Erweitertes Wissen
    Quellen

    Was passiert bei einem Bufferoverrun ?
    Bei einem Programmstart werden den ganzen Variablen die man braucht Werte zugewiesen um die Variablen zu initiallisieren !! So um Programm selbst könnte man auch nochmal eine überschreibung der Initialisierung vornehmen z.B. '
    int a = 0 ; <-- das wäre eine "echte" initiallisierung während
    --------------
    int a ;
    a = 0; <-- keine "echte" initalisierung ist ! ;)
    so nun nehmen wir einfach mal ein char array und geben ihm 41 Zeichen z.B. Diesen speziellen Bereich bezeichnet man auch als Stack , das Betriebsystem hat keinerlei Kontrollfunktionen eingebaut und vertraut dabei voll auf das Programm !!! Lustige Eigenschaft beim Stack (Stapel) ist das das letzte was reingeht is das erste was rausgeht bezeichnet man auch als LIFO (Last in First out)

    #include <stdio.h>
    int main ( )
    {
    char name[40];
    printf("Bitte geben Sie ihren Namen ein : ");
    gets(name);
    printf("Hallo, %s", name);
    return 0;
    }

    geben wir nun "Klaus Meier" ein sind das auf den ersten Blick 11 Zeichen aber man darf denn sogenanten Null Terminator nicht vergessen also +1 Zeichen = 12 Zeichen. Geben wir nun ein String ein mit sagen wir 50 Zeichen oder alles was über 41 Zeichen liegt haben wir einen Bufferoverun (Speicherüberlauf) erzeugt. Was normalerweise zum Programmabbruch führt ... Diese Probleme tretten nicht nur bei Char Arrays auf sondern auch bei Funktionsaufrufen , Rückgabewerte der Funktionen

    Was passiert genau ?
    Wir wissen ja unsere Variablen sind im Arbeitsspeicher abgelegt und haben eine bestimmte Adresse mit der man sie wiederfinden kann ... so bei einem Bufferoverun/flow werden dann die varibalen überschrieben mit sinnlosen Daten das das Programm nicht mehr verarbeiten kann , Absturtz !! Funktionen werden ebenfalls im Stack abgelegt und sind über denn Base Pointer (EBP) erreichbar. Bei Funktionsaufrufen wird es noch komplexer es gibt soetwas wie ein Einsprungspunkt in die Funktion und einen Rücksprungpunkt so kommt es in der Funktion zu einem Bufferoverrun kann es passieren das das Programm eine zufällige Rücksprungadresse erstellt und nich mehr beim aufrufer landet sondern sonst irgendwo , versucht von dort weiterzuarbeiten aber das geht nicht , Absturtz ! und wo ist nun die große Gefahr von Bufferoverruns ? ...

    Die Gefahren der Bufferoveruns
    Wir haben erfahren das eine zufällige Rücksprungadresse geschaffen wird und von der versucht wird weiterzuarbeiten. So ein Cracker / Hacker versucht nun diese Rücksprungadresse so zu modifizieren das die Rücksprungadresse keinen Zufallswert mehr besitzt , sondern eine vom Cracker / Hacker gewollte Adresse von der aus dann ein spezieller Code ausgeführt wird bezeichnet man in English als (arbitrary code) . So kann ein Cracker / Hacker nun einen alles mögliche anstellen Sicherheitseinstellungen modifizieren , Programm abstürtzte verursachen , Ausführen von Externen Programmen etc... Der Cracker / Hacker biegt "einfach" nur die Rücksprungadresse um auf irgendwas was im Speicher liegt was er gerne ausgeführt haben möchte :). Es gab schon die verrücktesten Bufferoverruns die es einem sogar erlaubten eine Firewall auszuschalten

    Probleme beim Software erstellen
    nehmen wir mal Java als gutes Beispiel es ist so ziemlich unverwundbar gegen Bufferoverflows jeder Art , da es seine Speicherverwaltung genau überwacht (Garbage Collektion) . C++ ist auch noch einigermassen sicher aber aber C hat die größten Probleme denkt man mal an denn Befehl strcpy () , da kann man die verrücktesten Sachen erleben wenn , strcpy(Ziel,Quelle) , Quelle wäre größer als Ziel schon hat man einen Bufferoverflow . Ich habe schon verrückte ausgaben nachher erlebt ASM Quellcode und sonstige Sachen aus dem Arbeitsspeicher ohne das das Programm eine "Speicherverletzung" verursacht hat ... Das war auch ein Bufferoverflow der meistens durch zu kleine Char Arrays passiert , die Funktion stringcopy kennt da keine gnade und überschreibt gleich ein paar Daten im Arbeitsspeicher... und da gibts einige solcher "gefährlichen" Funktionen ... C++ hat aber gute Debugger um solche Fehler zu vermeiden .... aber täglich gibts neue Meldungen über Bufferoverruns bei Bugtraq z.B. Cert etc..und das selbst bei denn M$ Produkten oder findet ihr es nicht peinlich das durch das simples betrachten von .chm (HTML Hilfedateien) alles Abstürtzt

    Erweitertes Wissen
    "Der Prozessor ist eine Recheneinheit, ergänzt um Register. Die Register kann man sich als interne Speicherstellen vorstellen, welche über symbolische Namen (EAX, EIP, ...) angesprochen werden. Die meisten dienen als allgemeine Zwischenspeicher für Rechenoperationen, Parameterübergabe und so weiter. Doch einige dieser Register erfüllen spezielle Aufgaben. Dazu gehören insbesondere der Instruction Pointer (EIP), der Base Pointer (EBP) und der Stack Pointer (ESP). Das vorangestellte ‘E’ steht für Extended und unterscheidet die 32-Bit-Register von ihren 16 Bit großen Pendants.
    Der Instruction Pointer zeigt immer auf die Adresse des nächsten auszuführenden Maschinenbefehls. Nachdem der Prozessor eine Anweisung abgearbeitet hat, lädt er den nächsten Befehl von dieser Adresse und setzt den Zeiger weiter. Beim Verzweigen in eine Unterfunktion überschreibt das Programm den Instruction Pointer mit deren Startadresse. Base Pointer (EBP) und Stack Pointer (ESP) beschreiben den lokalen Speicherbereich einer Unterfunktion. Sowohl der Heap als auch der Stack können zur Laufzeit des Programms wachsen. Bei modernen Betriebssystemen arbeitet jedes Programm in einem eigenen, virtuellen Adressraum, dessen Adressen die Hardware - konkret die Memory Management Unit (MMU) - erst bei Bedarf ‘echten’ Speicher zuordnet. In diesem legt das Betriebssystem beim Start eines Programms drei so genannte Segmente an: das Code-Segment, das Daten-Segment (auch Heap genannt) und das Stack-Segment. ‘Unten’ im Adressraum - also an den niedrigen Adressen - befindet sich das Code-Segment mit den eigentlichen Maschinenbefehlen des Programms. Es ist in Größe und Inhalt fest und zumeist gegen Überschreiben geschützt. Das heißt, ein Schreibversuch auf diese Adresse produziert eine Speicherschutzverletzung (‘segmentation violation’)."

    Quellen:
    http://www.nextgenss.com/papers/ntbufferoverflow.html <-- mit sehr netten Beispiel :)
    http://www.phrack.org/phrack/49/P49-14 <-- Für denn Programmierer beschrieben
    http://www.w00w00.org/files/articles/heaptut.txt <-- Heap Overflows

    by the_invincible @ http://www.kid2elite.de.vu



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Newcomer - Board

    HIHO - gepostet von SoNNyT am Sonntag 27.05.2007
    Windows XP Passwort cracken - gepostet von 4dministr4t0r am Dienstag 26.12.2006



    Ähnliche Beiträge wie "Buffer Overruns"

    buffer ergebnisse - Anonymous (Samstag 19.11.2005)