Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 05.01.2006, 14:53 Titel: Bufferoverflow |
|
|
Also, ich bin mehr sehr wohl bewusst, dass es verboten ist über viren und so zu reden (Forenregeln... ) aber, ich hab mir jetzt den PSP gekauft und prompt hab ich auch schon die meldung gekriegt:
"Ein Virus (PSP.brick) nutz einen Bufferoverflow der TIFF-Lese und ausführ engine, um die PSP zu infizieren und zur strecke zu bringen".
Jetzt würde mich mal interessieren:
Was ist ein Bufferoverflow?
Wie erzeugt man den überhaupt?
Was passiert dann? |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
5T3PH4N
Anmeldungsdatum: 01.10.2005 Beiträge: 145 Wohnort: Braunshardt
|
Verfasst am: 05.01.2006, 15:53 Titel: |
|
|
nun mach doch wenigstens n link unter das bild, is doch scheiße wenn da n bild is aber nix zu klicken  _________________ <green> We vegetarians love the environment. carnivores are sick freaks.
<Frank> How can vegetarians possibly love the environment.. you keep eating all the fucking plants |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 05.01.2006, 16:03 Titel: Re: Bufferoverflow |
|
|
psygate hat Folgendes geschrieben: |
Was ist ein Bufferoverflow? |
Siehe: http://de.wikipedia.org/wiki/Puffer%C3%BCberlauf
psygate hat Folgendes geschrieben: |
Wie erzeugt man den überhaupt? |
Kommt ganz auf die Programmiersprache an! In freeBASIC kannst du z.B. sowas erzeugen indem du eine Bitmap (via BLOAD) lädst, deren Speicher jedoch grösser als der festgelegte Speicherbereich ist.
Code: |
' Das Bild muss in diesem Fall natürlich größer als 10.000 Bytes sein
screen 18
dim image(10000) AS UBYTE
bload "bild.bmp", varptr(image(0))
put (0,0), image |
Zitat: | Was passiert dann? |
Der Programm stürzt ab.
Leider weis ich nicht welche Programmiersprache auf der PSP untersützt wird. Wen du jedoch Firmware 1.5 hast, kannst du eine modifizierte Windowsversion (ich glaube Windows 95) auf der PSP installieren (naja, eher emulieren weil du natürlich nicht von einem Memorystick booten kannst).
Näheres dazu: http://www.hacker.co.il/psp/bochs/ _________________ www.piratenpartei.de |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.01.2006, 18:48 Titel: |
|
|
Auch ein Beispiel in Freebasic:
Code: | dim liste1(1 to 3) as string*10
dim liste2(1 to 3) as string*10
liste1(1)="Apfel "
liste1(2)="Birne "
liste1(3)="Pflaume"
liste2(1)="Hund "
liste2(2)="Katze "
liste2(3)="Fisch "
for i=0 to 6
? liste1(i)
next i
sleep |
Und das ist die Ausgabe:
Code: | Apfel
Birne
Pflaume
Hun
Kat
e Fis |
_________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.01.2006, 22:53 Titel: |
|
|
Zum Thema Pufferüberlauf gibt einen ganz hübschen, englischen Artikel:
http://www.insecure.org/stf/smashstack.txt
Grundproblem sind vor allem Stringkopierfunktionen (in C kann man halt nicht einfach bloss a$=b$ schreiben, sondern muss strcpy(b, a) bzw. besser strncpy() aufrufen) speziell bei Strings mit fester Länge, aber ebenso Array-Variablen, wenn das Programm zwecks Geschwindigkeitsoptimierung auf jeglichen Boundary-Check verzichtet. Dann überschreibt ein
Code: | DIM a%(1 TO 100)
a%(110) = 1234 |
voll und ganz den Speicher ausserhalb der Variable, so dass es früher oder später mit einem Absturz endet. Hacker analysieren nun die Speicherbelegung und versuchen nichts anderes, als einen kontrollierten Absturz zu bewirken, wo der Prozess nicht einfach abstürzt, sondern ein eigener Code ausführt, der beispielsweise den Prozess als Backdoor umwandelt.
Gegenmassnahme: Man sollte eigentlich immer alles nach dem Grundsatz "All Input is Evil." programmieren, d.h. alles was von aussen reinkommt, immer als nicht vertrauenswürdig betrachten und gründlich prüfen. Gilt im besonderen Masse für PHP-Scripte in der eigenen Homepage! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 06.01.2006, 18:41 Titel: |
|
|
@Dreael
Hack nicht so auf C rum , Freebasic hat auch keine Nenneswerten Überlaufschutz ... Okey, unsere String Verwaltung ist besser, aber die Array verwaltung ist der von C nicht unähnlich ...
Hier ein Beispiel
Code: | dim liste1(1 to 3) as string*10
dim liste2(1 to 3) as string*10
liste1(1)="Apfel "
liste1(2)="Birne "
liste1(3)="Pflaume"
liste1(4)="Hund "
liste1(5)="Katze "
liste1(6)="Fisch "
for i=0 to 6
? liste1(i)
next i
?
for i=0 to 6
? liste2(i)
next i
sleep |
Obwohl Liste1 unterdimensioniert ist, kann man weiter schreiben, das witzige ist nun, das man sogar ohne Probleme wieder Auslessen kann, das Problem ist einfach, das Liste1 Liste2 überschreibt.
Hier die Ausgabe des Programmes:
Code: | Apfel
Birne
Pflaume
Hund
Katze
Fisch
Hund
Katze
Fisch
♦
☺ |
Zudem:
Bei PHP kommt noch ein anderes Phänomen hinzu:
Weil PHP interpretiert wird, kann man über Falsch Programmierte Eingabe Felder Code einschlüssen.
Dieses Phänomen hat mit den klassisen Überlauf nichts gemein. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 07.01.2006, 14:08 Titel: |
|
|
Boah... DANKE.
Jetzt hab ichs kapiert, aber, wie machen das die hacker, dass der code, der aus dem puffer schappt (das wort gefällt mir schwappen - schwappt - geschwappt^^) auch ausgeführt wird, oder crasht man dadurch einfach nur den computer? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 07.01.2006, 15:40 Titel: |
|
|
Beides möglich, bei Windows wo alle die Gleiche Binär Version nutzen kann der Überlauf so gezielt gemacht werden, das man Rücksprungadressen (ähnlich wie das Basic Goto) überschreibt, so kann man schon mal an eine beliebiege Stelle im Programm springen.
An diese Stelle wo mann hinspringt kann man Sinnvollerweisse ja auch noch gleich den eigenen Code per Überlauf setzen und schon läuft ein Programm das nicht laufen darf.
Alternativ kann man wenn man an jede Adresse schreiben kann, auch einfach die als nächstes Auszuführenten (Maschienensprache) Befehle überschreiben.
Wenn der Overflow (englisches Wort für Überlauf) noch nicht genau "erforscht" ist oder der Überlauf ausversehen entsteht, stürzt das Programm oder das Betriebssystem in der Regel früher oder später ab.
Bei Linux wo jeder den Code selbst compilieren kann und jeder eine etwas andere Compiler Version und andere Einstellungen nutzen kann, sind gezielte Überlaufe jedoch schwerer, dort kann ein Hacker meist nur einen Crash Verursachen.
Folgende neben Infomation:
Diese Schwachstelle haben wir übrigens der sogenannten Von Neumann Architektur zu verdanken, die Daten und Befehle im gleichen Speicher "lagert" im gegensatz zur Harvard Architektur wo Daten und Befehle strikt getrennt sind. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 07.01.2006, 19:42 Titel: |
|
|
hm...
ihr habt da ja ein paar beispiele gepostet, aber wie genau kommt es bei denen nun zu diesen kryptischen erscheinungen? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 08.01.2006, 08:58 Titel: |
|
|
Stell es dir ganz einfach vor:
Stell dir den Speicher des Computers als ein Liniertes Papier vor, eine Variabel ist eine Zeile.
Ein Array ist Gruppe von Variabeln die direkt nacheinander kommt.
Array(0) ist sagen wir Zeile 4, das komplete Array geht bis Zeile 7.
Greift du auf Array(0) zu wird Zeile 4 gelessen,
Greift du auf Array(1) zu wird Zeile 5 gelessen,
Greift du auf Array(2) zu wird Zeile 6 gelessen,
Greift du auf Array(3) zu wird Zeile 7 gelessen,
Greift du auf Array(4) zu wird Zeile 8 gelessen,
Nun ist es passiert, das Array geht ja nur bis Zeile 7!
Zeile 8 gehört einer ganz anderen Variabel, aber weil aber die Adresse berechent wird und nicht geprüft ausgeführt passiert das.
Nun etwas komplexer:
Wir haben ein Array "Liste" das von 0 bis 3 geht und jeder Eintrag braucht 6 Byte.
Das Array hat einen Anfang also Liste(0), dieser ist mit einer Speicheradresse verbunden, sagen wir mal die Speicheradresse sei einfach mal "25".
Die Anzahl Eintrage in der Liste sind 4 weil ja von 0 bis 3 sind es 4 Zahlen
Grösse der Liste = Grösse eines Eintrages*Anzahl Einträge
6*4=24
Nun wird also der Speicherbereich von 25 bis (25+24)=49 reserviert für Liste.
Rufst du nun einen Eintrag auf, z.B. Liste(2), wird die Speicheradresse berechnet:
Speicheradresse=Grundadresse+Grösse eines Eintrages*Indexzahl
=25+6*2=37
Nun werden also ab Speichadresse 37 6 Byte gelessen, kein Problem.
Fragt man nun Liste(4) wird die Adresse auch berechnet:
=25+6*4=49
Fragt man ab Stelle 49 6 Byte ab, landet man Ausserhalb des reservierten Bereiches von Liste, also im Reservierten Bereich einer anderen Variabel. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 08.01.2006, 22:56 Titel: |
|
|
Jetzt hab ichs kapiert, danke!
Aber nun mal ernsthaft:
Ginge es in freebasic, (rein aus interesse!) ein programm zu schreiben, welches einen programmpuffer überlädt und dann ein programm ausführt? |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 08.01.2006, 23:00 Titel: |
|
|
Zitat: | welches einen programmpuffer überlädt und dann ein programm ausführt? |
Nein! Das Programm bricht sofort ab und stürzt ab, kann also kein Programm ausführen. _________________ www.piratenpartei.de |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 08.01.2006, 23:47 Titel: |
|
|
Geht das evtl mit der WinAPI?
Mit reinem FB denke ich mal, dass es wenn auch nur sehr sehr schwer geht. Bei mir kommen am Tag bis zu 50 solcher Meldungen, wenn ich wieder am Basteln bin, und irgendwo bei allocate mal wieder 2 Ziffern vertauscht habe  _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 09.01.2006, 16:33 Titel: |
|
|
es geht, ich hab mich mal schlau gemacht. es gibt einige dateien, die den puffer flodden und einen code platzieren, der einem programm ähnelt. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.01.2006, 18:19 Titel: |
|
|
@Devilkevin
Da bin ich andere Meinung!
Auch wenn du es nicht gelauben willst, habe Freebasic hat Vergleichbare "Lücken" wie C. Anführungszeichen, weil die Lücken zwischen durch Toren ähnlen ...
Meine Beispiele zeigen klar das auch Freebasic solche Probleme hat.
Leider kann ich kein Asembler so muss ich dir den Ultimativen Beweiss schuldug bleiben, aber ein Erfahrener Asembler Programmierer kann aus dem ASM Code eines Freebasic Programmes bestimmt etwas machen ....
@programmierer
Deine Overflows sind aber auch Ziellos/ ohne Absicht, das ist nicht damit zuvergleichen wie man jemannd den Asembler Code analysiert ....
Klar geht es sehr schwer, das ist es aber auch bei C und C++ und trotzdem wird es regelmässig auch ohne Quellcode geschaft .... _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 09.01.2006, 20:02 Titel: |
|
|
@Michael Frey:
Die meisten sicherhetslücken haben die bildviewer, nicht ohne grund. Ein bild hat gegebee maße, und sobald es geladen wird, wird ein array mit eben diesen maßen bereitgestellt. Da kann es schon sein, dass etwas übers ziel hinaus geht. Dazu muss man nicht mal assemler können. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.01.2006, 20:08 Titel: |
|
|
Ja, aber um Code einzuführen braucht man Asembler Kenntnisse sonst hat man keine Chance, aber für einen Absturz bekommt man natürlich auch ohne Asemblerkentnisse hin.
Und das an programmierer / Devilkevin ging ja um's einschleussen von Code, für die man meiner Meinung nach Asemblerkentnisse braucht. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 09.01.2006, 22:13 Titel: |
|
|
und was, wenn man einfac eine freebasic exe in die daten schmuggelt? von-Neumann machts möglich! |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 09.01.2006, 23:00 Titel: |
|
|
Also ohne eine Maschienennahe Sprache wie Asm wirst du da nix reisen können. Basic, Pascal etc. is für sowas ungeignet.
Naja wen du Glück hast gibts irgendwo ne Lib die sowas ermöglicht, höre dich mal im englishen FB Forum um  _________________ www.piratenpartei.de |
|
Nach oben |
|
 |
|