Ergebnis 1 bis 9 von 9
  1. #1
    Registriert seit
    06 2008
    Beiträge
    28

    Exclamation WebApplication-Security - Prävention und Fernhaltung krimineller Energien.

    auf mehrfachen wunsch eröffnen wir diesen thread .

    ausdrücklich sei erwähnt, dass es hierbei *nicht* darum geht, wie ich fremde daten illegaler weise auf meinem server spiegeln kann oder das konto meines bösen nachbarn leerräume. maßnahmen zur bekämpfung dieser vorfälle sind ebenfalls offTopic und unerwünscht, da wir hierzu keinen rechtsbeistand leisten und auch keinen juristen empfehlen werden.

    zur diskussion stehen aktuelle themen wie XSS (Cross-Site-Scripting), SQL-Injection und weitere sicherheitsrisiken, die bei web-anwendungen ein mögliches angriffsziel bieten. in erster linie geht es um das verständnis dieser exploits und deren vermeidung durch patches oder workarounds.

    nun denn, viel spaß beim posten
    while solving errors we never had an unexpected error

  2. #2
    Registriert seit
    01 2005
    Beiträge
    344
    PHP:

    ich würde mal behaupten, dass sich eine große Angriffsfläche schon mal unterbinden ließe, wenn man die Variablen $_POST und $_GET auf validen Inhalt überprüft.

    preg_match() und eregi() sind kein Hexenwerk und können viel Unfug verhindern.

    Die Verwendung von mysql_real_escape_string() beugt SQL-Injections vor.

    Alle Leser dieser Box haben nun keine Entschuldigung mehr, wenn auf Grund nicht geprüfter Eingaben Blödsinn mit ihren Systemen getrieben wird oder sich einer ohne Passwort einloggen kann

    Jürgen
    Geändert von Jürgen Donauer (27.06.2008 um 19:52 Uhr)
    (bb|[^b]{2})/ -- that is the question!

    http://www.dive-hive.com

  3. #3
    Registriert seit
    06 2008
    Beiträge
    28
    lol...hätt ich nicht besser schreiben können!
    evtl. sollten wir uns den matchcode mal etwas näher anschauen.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Capturar.JPG 
Hits:	213 
Größe:	94,0 KB 
ID:	73

    und als simples beispiel
    PHP-Code:
    if($_POST['action'] == "register") {
    // sollte jedem klar sein, oder?
         
    if (preg_match("/^[a-z0-9]*$/is"$_POST['nickname'])){
             echo 
    "okay";
          }

    selbstverständlich sollte man auch darauf achten, dass register_globals nicht ein zufälliger parameter ist und in der php.ini auf OFF gesetzt wird. aber das soll, soweit ich informiert bin, mit PHP6 wegfallen und man braucht sich darum keine gedanken mehr zu machen.

    worauf kommt es nun an und welche prüfungen sind lästig, bzw. serverlastig und wie kann ich das ermitteln?
    ein vergleich zwischen eregi()
    PHP-Code:
    $myString 'myEregiStringTangaPregVeryMatch';
     
    for(
    $i 0$i <= 1000000$i++)
    {
    var_dump(eregi('^[A-Z\.]+$'$myString));

    und preg_match()
    PHP-Code:
    $myString 'myEregiStringTangaPregVeryMatch';
     
    for(
    $i 0$i <= 1000000$i++)
    {
        
    var_dump(preg_match('/^[A-Z\.]+$/i'$myString));

    liefern bei einem benchmark recht interessante ergebnisse. der unterschied liegt zwar ann&#228;hernd im nano-bereich, aber es kann bei stark frequentierten anwendungen schon wertvolle 'lebenszeit' bedeuten.

    weiterhin ist die methode der parameter-&#252;bergabe auch ein wichtiges kriterium und bedeutet ebenfalls kostbare zeit
    PHP-Code:
    $query sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', %d)",
                        
    mysql_real_escape_string($product_name$link),
                        
    mysql_real_escape_string($product_description$link),
                        
    $_POST['user_id']); 
    in dem beispiel wird sprintf() verwendet um den string in eine query zu &#252;bergeben. nun, das ist zwar sicher, aber sicherlich auch zeitintensiver als
    PHP-Code:
    $query "INSERT INTO products (`name`, `description`, `user_id`) VALUES ('".mysql_real_escape_string($product_name$link)."','".mysql_real_escape_string($product_description$link)."','"$_POST['user_id']."')" 
    dies sollte jeder mal ausprobieren und f&#252;r sich selbst entscheiden. der apache bietet hierf&#252;r beste voraussetzungen
    Das Programm ab finden Sie im Verzeichnis /usr/local/apache2/bin auf ihrem Server. (Das Verzeichnis kann abh&#228;ngig von Ihrer Installation auch ein anderes sein.) Ab Suse 9.1 geht's mit dem Aufruf von ab2

    Starten Sie ab mit folgenden Parametern:

    ab –n 1000 ihrserver/test1.php

    Statt "ihrserver" geben Sie die URL Ihres Testservers ein oder tippen einfach "localhost". Nach einem Tastendruck auf Return geht es los. Das Benchmark ruft 1000mal nacheinander die Testdatei auf und f&#252;hrt sie aus. Danach gibt es eine h&#252;bsche Zusammenfassung. Am interessantesten f&#252;r den schnellen Test ist darin die Angabe der "Time per request:". Hier steht der Zeitraum in Millisekunden, den ein Aufruf der Datei gebracht hat.
    aber von der optimierung des codes zur&#252;ck zum eigentlichen thema. mit pattern-matching kann ich vorbeugen und b&#246;sen absichten etwas weniger angriffsvektoren bieten. man sollte sich stets dar&#252;ber im klaren sein das: je weniger raum ich gebe, desto weniger kann darin passieren - aber bitte nicht zu lasten der features!
    deswegen ist ein gut strukturierter code das A & O jeglicher anwendungen. nur allzu oft passiert es, dass wir mal eben eine routine oder zus&#228;tzliche funktionen erweitern und mehr oder weniger schnell den &#252;berblick verlieren, da es inzwischen hunderte dieser spaghetties geworden sind. wirklich nicht zu empfehlen, aber im alltag nicht immer so einfach umzusetzen...jeder kennt es, das zeit-und-raum-problem

    hilfreich kann auch kann dieser eintrag in der php.ini sein: expose_php = Off
    es verhindert die ausgabe der php-version. weitere informationen die misbraucht werden k&#246;nnen, kann ich in der httpd.conf vorwegnehmen:
    APACHE_SERVERSIGNATURE="off"
    APACHE_SERVERTOKENS="Prod"
    in meinem fall muss ich /etc/sysconfig/apache2 editieren, damit der eintrag permanent bleibt.

    sinn und zweck ist ganz einfach. wenn ich keine eigenen fehlerdokumente definiert habe, kann ich die ausgabe der version des web-servers und weiteren modulen verhindern. dies ist zwar kein wirksamer schutz, bietet aber wiederum weniger info, die sich b&#246;se jungs nunmal als erstes holen wollen, um bereits bekannte exploits anzuwenden

    ich habe einen gespr&#228;chigen XAMPP:

    Error 404
    localhost
    06/28/08 09:47:16
    Apache/2.2.8 (Win32) DAV/2 mod_ssl/2.2.8 OpenSSL/0.9.8g mod_autoindex_color PHP/5.2.5
    und einen nicht so freiz&#252;gigen server im netz ohne eigene fehlerseiten:
    Error 404
    schranz.tv
    Sat Jun 28 10:08:35 2008
    Apache
    diesmal mit
    Not Found
    The requested document was not found on this server.


    --------------------------------------------------------------------------------

    Web Server at schranz.tv
    bitte nicht unbedingt die domain aufrufen. dort ist (noch) nix gescheites und es poppen die werbebanner, die eh nix bringen

    BTW: falls jemand ne idee zu schranz.tv hat, bin ich zu jeder schandtat bereit
    Geändert von pro2sell (28.06.2008 um 22:42 Uhr) Grund: 2nd query corrected
    while solving errors we never had an unexpected error

  4. #4
    Registriert seit
    01 2005
    Beiträge
    344
    hier kann ich vielleicht noch ne potentielle Fehlerquelle beisteuern. Mir hat letztens der Webserver einen Fehler geschmissen, den ich noch nie zuvor gesehen hatte:

    Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 14 in datei.php on line 34

    huh?! ... ok irgendwas faul mit dem regul&#228;ren Ausdruck (ich hab den gek&#252;rzt wegen einfacherer Darstellung) ...
    PHP-Code:
    preg_match("/^([A-Za-z0-9.-,]{1,200})$/"$_POST['variable']) 
    Der Ausdruck w&#252;rde zulassen: Bereich von A bis Z, von a bis z, von 0 bis 9 und von Punkt bis Komma. Letzteres ist nat&#252;rlich grober Unfug. Stattdessen h&#228;tte sich ein so genanntes "Escape" vor das Minus geh&#246;rt:

    PHP-Code:
    preg_match("/^([A-Za-z0-9.\-,]{1,200})$/"$_POST['variable']) 
    Nun wei&#223; der Ausdruck, dass es nicht zum Befehlssatz geh&#246;rt, sondern dieser das Zeichen einfach als Zeichen behandeln soll.

    Sollte jemand mal auf den Fehler sto&#223;en, hat er wahrscheinlich einen &#228;hnlichen Mist geschrieben


    Zu SQL-Injections wollte ich noch nachtragen, ohne potentielle Exploit-Code zu ver&#246;ffentlichen (wegen B&#246;si-Hacker-Dummgesetz):
    Man sollte unter allen Umst&#228;nden verhindern, dass eine SQL-Anfrage der Art:
    Code:
    SELECT * FROM users WHERE user='testdoedel' AND password='' OR ''=''
    an den Server weitergegeben wird. Dies w&#252;rde dem Nutzer "testdoedel" eine Abfrage OHNE zugeh&#246;riges Passwort erlauben. mysql_real_escape_string() verhindert dies.

    Gru&#223;,
    J&#252;rgen
    Geändert von Jürgen Donauer (28.06.2008 um 10:23 Uhr)
    (bb|[^b]{2})/ -- that is the question!

    http://www.dive-hive.com

  5. #5
    Registriert seit
    06 2008
    Beiträge
    28
    um allen anschuldigungen eines arbeitslosen paragraphenreiters im voraus zu sein, empfehle ich einen linik zur wikipedia. dort (wo sonst!) ist SQL-Injection mal etwas ausf&#252;hrlicher erkl&#228;rt, als wir es hier wollen. w&#252;rde keinen sinn machen das rad neu zu erfinden...

    SQL-Injection &#226;€“ Wikipedia

    und sein &#228;quivalent zu XSS

    E-Mail-Injektion &#226;€“ Wikipedia

    oder

    E-Mail-Injection

    alle guten dinge sind drei - 1 0, parit&#228;t

    cheers
    Geändert von pro2sell (28.06.2008 um 17:39 Uhr)
    while solving errors we never had an unexpected error

  6. #6
    Registriert seit
    01 2005
    Beiträge
    344
    es verhindert die ausgabe der php-version. weitere informationen die misbraucht werden können, kann ich in der httpd.conf vornehmen:
    APACHE_SERVERSIGNATURE="off"
    APACHE_SERVERTOKENS="Prod"
    in meinem fall muss ich /etc/sysconfig/apache2 editieren, damit der eintrag permanent bleibt.
    sehr schöner Tipp übrigens!

    Unter Ubuntu (sollte auch für Debian zutreffen glaub ich) findet man diese Einstellungen in der Datei
    Code:
    /etc/apache2/apache2.conf
    die Variablen hierfür müssten als Äquivalent
    Code:
    ServerTokens Prod
    ServerSignature Off
    heißen. Vielleicht kanns mal einer für Red Hat, Mandriva,... nachguggen ... hab grad keines am Laufen. Bzw hab keinen Rechner mit dem ich alle 140.358 (<- leichte Übertreibung!) auf distrowatch gelisteten Distris einspielen kann
    (bb|[^b]{2})/ -- that is the question!

    http://www.dive-hive.com

  7. #7
    Registriert seit
    06 2008
    Beiträge
    28
    jetzt, wo wir unseren oberindianer so schön verstecken können, wollen natürlich böse buben wissen, welche version sich dahinter verbirgt! ist es der apache 1.3.x oder apache22 oder 3 oder 4711...?

    es wird nun damit angefangen den webserver zu stressen und über meinen port 80 geht eine menge traffic ab, den ich schlecht kontrollieren/einschränken kann.

    da ich

    1. die logfiles langsamer lesen kann, als sie geschrieben werden
    2. ich irgendwann meine blechtrommel hole
    3. keine lust auf nervige sachen habe


    also was tun? jenseits von gut & böse sitze ich nun da und überlege wie ich am schnellsten herausfinde, was dort abgeht...#@!

    tipp:ähnliche mittel verwenden, wie die vermeindlichen angreifer!

    die sitzen nämlich auch nicht ständig mit der klampfe in der hand vorm screen, sondern es läuft entweder ein bot, daemon oder sonstiges tool. damit werden komplette ip-ranges in kurzer zeit gestresst und fein als human-readable log über den äther geschickt.

    intrusion detection bietet hier einen vorteil.
    aus eigener erfahrung:
    ich setze gern den snort ein, denn es ist wirklich ein kleines schweinchen

    ich kann seine rules frei definieren und/oder regelmäßig updaten lassen. die ALERTS kann ich entweder als flat-file schreiben lassen ODER in eine MySQL-DB

    letzteres bietet den entscheidenden vorteil, dass ich ein front-end nutzen kann und habe wirklich alles im überblick. sogar der request und response wird mit geloggt. eine gute kombination sind snort + ACID = Analysis Console for Intrusion Databases
    so! ab jetzt kann ich mitreden und diesen bengels den gar aus machen - oder?

    nö, noch nicht ...

    ich kann jetzt fein säuberlich und chronologisch sortiert (oder wie auch immer) die attacken nachvollziehen, aber nix passiert. eine gute hilfe hierzu ist ein kleines shell-script, das als daemon die alerts vom snort mitliest und die source IP mal eben für einen gewissen zeitraum in die iptables via add drop einträgt

    will ich mehr?
    while solving errors we never had an unexpected error

  8. #8
    Registriert seit
    06 2008
    Beiträge
    28
    JA, den guardian

    cheers!
    while solving errors we never had an unexpected error

  9. #9
    Registriert seit
    06 2008
    Beiträge
    28
    noch mehr?

    ok, hier ist ein hilfreiches tool, um den traffic zu beobachten
    while solving errors we never had an unexpected error

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. IT Security Management mit ITIL
    Von Malte Jeschke im Forum Ihre Kommentare
    Antworten: 0
    Letzter Beitrag: 17.04.2008, 10:44
  2. Zone alarm Security Suit
    Von avl_user im Forum Systemtools
    Antworten: 16
    Letzter Beitrag: 09.01.2005, 22:38
  3. Problem mit Norton Internet Security 2004
    Von gameco im Forum Sicherheit
    Antworten: 1
    Letzter Beitrag: 14.12.2004, 17:29
  4. Info-Security-Portal
    Von awa1 im Forum Sicherheit
    Antworten: 3
    Letzter Beitrag: 21.06.2004, 15:30
  5. Security Task Manager
    Von Neuber Software im Forum Free-/Shareware
    Antworten: 0
    Letzter Beitrag: 14.11.2003, 11:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •