Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Bufferoverflow
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 05.01.2006, 14:53    Titel: Bufferoverflow Antworten mit Zitat

Also, ich bin mehr sehr wohl bewusst, dass es verboten ist über viren und so zu reden (Forenregeln... Kopf schütteln ) 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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 05.01.2006, 15:18    Titel: Antworten mit Zitat

Hat mit FreeBASIC nix zu tun. Ich verschieb's mal ins Computerforum.

Zum Thema selbst:


zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
5T3PH4N



Anmeldungsdatum: 01.10.2005
Beiträge: 145
Wohnort: Braunshardt

BeitragVerfasst am: 05.01.2006, 15:53    Titel: Antworten mit Zitat

nun mach doch wenigstens n link unter das bild, is doch scheiße wenn da n bild is aber nix zu klicken grinsen
_________________
<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
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 05.01.2006, 16:03    Titel: Re: Bufferoverflow Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 05.01.2006, 18:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 05.01.2006, 22:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 06.01.2006, 18:41    Titel: Antworten mit Zitat

@Dreael
Hack nicht so auf C rum zwinkern, 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 07.01.2006, 14:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 07.01.2006, 15:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 07.01.2006, 19:42    Titel: Antworten mit Zitat

hm...

ihr habt da ja ein paar beispiele gepostet, aber wie genau kommt es bei denen nun zu diesen kryptischen erscheinungen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.01.2006, 08:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 08.01.2006, 22:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 08.01.2006, 23:00    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 08.01.2006, 23:47    Titel: Antworten mit Zitat

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 grinsen
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 09.01.2006, 16:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.01.2006, 18:19    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 09.01.2006, 20:02    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.01.2006, 20:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 09.01.2006, 22:13    Titel: Antworten mit Zitat

und was, wenn man einfac eine freebasic exe in die daten schmuggelt? von-Neumann machts möglich!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 09.01.2006, 23:00    Titel: Antworten mit Zitat

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 zwinkern
_________________
www.piratenpartei.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz