Sicherheitssoftware: CTXtra

Started by Nordin, April 09, 2007, 11:43:54 AM

Previous topic - Next topic

Nordin

ok hört sich gut an... bin auch erst 20uhr wieder @home
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

ianus

Grüße!

Interessante Überlegungen. Ich bin durchaus neugierig auf die Resultate Eures ,,brainstormings".

Derweil möchte ich, vor allem wegen diesem Satz
QuoteAch ja optional versuch ich noch den Post des BOTS vorher abzufangen und zuloggen... mal gucken.
auf ein Projekt aufmerksam machen, welches sich genau mit dieser Überlegung beschäftigt.

http://www.bot-trap.de/forum/index.php

Ich selbst habe dieses Script im Einsatz und bin damit nicht das einzige SMF Board. Das Script an sich funktioniert hervorragend, scheitert aber an echten Personen.
So wird zwar einiges gefiltert, doch ohne eine foreneigene Sperrliste komme ich nicht wirklich aus. Es gibt einfach noch zu viele Proxys und natürlich ist es problematisch Dial-in Zugänge zu blocken.

Neben der Bot-Trap, den foreneigenen Mitteln (Bannliste), mods wie No Spam by Guests! würde ich ein weiteres Hindernis begrüßen.

Nordin

Bot-Trap hatte ich mir schon angeschaut (bin die seite überflogen) ... schein recht gut zu sein aber ist kein OpenSource bzw kein GPL oder täusche ich mich da? Somit darf da auch kein anderer im Code "rumpfuschen" was ich wiederrum schade finde da ich gern "spiele" *g*
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Christian Land

Übrigens... wenn Du meine Änderung benutzt, dann zieht das mit dem von Dir oben geposteten $wormprotector-Array nicht mehr. Du musst die %20 in den Array-Elementen durch ein Leerzeichen ersetzen. Wenn Du in mein altes Posting schaust siehst Du den Unterschied. Ausserdem solltest Du die gross geschriebenen Einträge durch kleingeschriebene ersetzen. Oder die str_replace-Funktion durch str_ireplace ersetzen (die gibts aber erst ab PHP 5) weil die Funktion sonst zu leicht auszutricksen ist weil sonst das Ändern von z.B. <SCRIPT> in <SCRiPT> reichen würde, etc.

Ich hatte auch mal vor Ewigkeiten eine kleine Erweiterung für mein Board gebastelt die die Zugriffe pro IP in einem bestimmten Zeitraum auf das Board gezählt hat und bei Überschreitung eines bestimmten Grenzwertes die IP für ein paar Stunden gesperrt hat (per .htaccess) - auch ne nette Erweiterung ist, zu checken wieviel Zeit zwischen Registrierung eines Accounts und dem ersten Posting liegt... eines meiner Foren hatte ich einfach so erweitert, dass es in dem Fall (1. Posting weniger als 30s nach Registrierung) einfach das Posting und den Account gelöscht hat. Hat das Spamming da extrem reduziert (um gut und gerne 95% oder mehr - war ein altes YaBB SE, dass den Captcha-Schutz noch nicht hatte) - wobei hier das Problem ist, dass je mehr Boards das als Schutz benutzen, die Spammer vermutlich auch klüger werden und einfach mehr Zeit verstreichen lassen ;D

Nordin

#44
@SnowCrash
mit den %20 hab ich im eifer des gefechts garnicht mitbekommen.&nbsp; &nbsp;:-[
Was str_replace angeht, würde ich sagen ich lass das noch nen weilchen drin da ja&nbsp; doch noch wenige hosts php5 anbieten.

Quotewobei hier das Problem ist, dass je mehr Boards das als Schutz benutzen, die Spammer vermutlich auch klüger werden und einfach mehr Zeit verstreichen lassen
Ist wie immer ein "Kampf" wer ist besser ;) Aber wenn viele Leute mit an meinen Projekt stricken wird es denke ich ganz gut...

Hab schon gut was gegen SP'AM gestrickt
"if Post von Gast AND und SesionMitglied <= Mitglied dann zeige es nicht an"
Alles größer ist als Mitgleid (Mods, Admins...) sehen den Beitrag (aber makiert als SPAM)

siehe Anhang
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Christian Land

Wie gesagt... wenn Du kein str_ireplace nutzt, solltest Du das Array so anpassen:

  $wormprotector = array('chr(', 'chr=', 'chr ', ' chr', 'wget ', ' wget', 'wget(',
    'cmd=', ' cmd', 'cmd ', 'rush=', ' rush', 'rush ', 'union ',
    ' union', 'union(', 'union=', 'echr(', ' echr', 'echr ', 'echr=',
    'esystem(', 'esystem ', 'cp ', ' cp', 'cp(', 'mdir ', ' mdir',
    'mdir(', 'mcd ', 'mrd ', 'rm ', ' mcd', ' mrd', ' rm',
    'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv ', 'rmdir ',
    'mv(', 'rmdir(', 'chmod(', 'chmod ', ' chmod', 'chmod(', 'chmod=',
    'chown ', 'chgrp ', 'chown(', 'chgrp(', 'locate ', 'grep ', 'locate(',
    'grep(', 'diff ', 'kill ', 'kill(', 'killall', 'passwd ', ' passwd',
    'passwd(', 'telnet ', 'vi(', 'vi ', 'insert into', 'select ', 'nigga(',
    ' nigga', 'nigga ', 'fopen', 'fwrite', ' like', 'like ', '$_request',
    '$_get', '$request', '$get', '.system', 'http_php', '&aim', ' getenv',
    'getenv ', 'new_password', '&icq', '/etc/password', '/etc/shadow', '/etc/groups', '/etc/gshadow',
    'http_user_agent', 'http_host', '/bin/ps', 'wget ', 'uname\\x20-a', '/usr/bin/id', '/bin/echo',
    '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\\+\\+', 'bin/python',
    'bin/tclsh', 'bin/nasm', 'perl ', 'traceroute ', 'ping ', '.pl', '/usr/x11r6/bin/xterm',
    'lsof ', '/bin/mail', '.conf', 'motd ', 'http/1.', '.inc.php', 'config.php',
    'cgi-', '.eml', 'file\\://', 'window.open');


weil es sonst nicht funktioniert.

Ausserdem hast Du noch nen kleinen Fehler im HTML *g*

                  <td style="text-align:middel; height:100px; vertical-align:middle;">

middel? ;D

Übrigens wegen der Diskussion um Logging in Datei/Datenbank... einfacher Grund der dagegen spricht es so wie bisher (File) zu machen: Ich schreib nen Script, dass gezielt Deinen CTracker antriggert und lass das über Nacht laufen... Ergebnis: Deine Log-Datei wird etliche MB gross und dadurch wird das Script immer langsamer und läuft wegen zu hohem Speicherverbrauch (Du liest das File ja komplett ein) irgendwann garnicht mehr -> Ziel erreicht, Seite tot ;D

Wobei ich das Logging eh komplett ändern würde... Wenn Du in der DB loggst, würde ich es so machen, dass ich nicht jeden einzelnen Versuch loggen würde, sondern zeitlich gestaffelt pro IP. Sprich: wenn die IP 1.2.3.4 10000 mal versucht was "illegales" zu tun, würde ich genau diese Tatsache loggen, nicht 10000 einzelne Einträge, dass die IP 1.2.3.4 was probiert hat...  Das könnte man grob so lösen: In der DB unter anderem die IP und einen "Startzeitpunkt" ablegen. Wird cTracker aktiv, wird die IP geloggt und der Startzeitpunkt auf die aktuelle Uhrzeit gesetzt. Wird cTracker erneut getriggert, checkt er ob für diese IP innerhalb der letzten z.B. 60 Minuten ein Angriff geloggt wurde und wenn ja wird nur der Datensatz so aktualisiert, dass der Counter für die Anzahl Angriffe hochgesetzt wird. Sollte sich über cleveres setzen des Index und über die REPLACE-Syntax von MySQL mit max. 2-3 Queries lösen lassen...

mediman

So, da wir gestern leider wie die blöden NameServer-Wartung betrieben haben, wurde es nix mit Brainstorming.
Ich denke, ich melde mich, so wir die ersten Zyklen durch haben.
My Projects: http://ticker-oase.de 
Please do not PM me with support requests.

Nordin

QuoteÜbrigens wegen der Diskussion um Logging in Datei/Datenbank... einfacher Grund der dagegen spricht es so wie bisher (File) zu machen: Ich schreib nen Script, dass gezielt Deinen CTracker antriggert und lass das über Nacht laufen... Ergebnis: Deine Log-Datei wird etliche MB gross und dadurch wird das Script immer langsamer und läuft wegen zu hohem Speicherverbrauch (Du liest das File ja komplett ein) irgendwann garnicht mehr -> Ziel erreicht, Seite tot

Hmm also ich ich hab den ursprünglich "stand alone CTracker" ja parallel mit angepasst. Da ist ja dann auch das Problem das die file mehrere MB groß werden kann. Wäre da sicher auch Sinnvoll die Logs so zu erweitern das er vorher prüft... alá
Quotewürde ich es so machen, dass ich nicht jeden einzelnen Versuch loggen würde, sondern zeitlich gestaffelt pro IP.
Oder würde es da auch probleme geben?

das Array hab ich angepasst und "middel" :D hab ich mal geändert lol
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Christian Land

#48
File-basiert ist immer problematisch weil Du dann anfangen musst, ein File-Handling zu programmieren. Ggf. mit Locking, etc. was tierisch viel unnötige Arbeit ist... die eventuell einfachste Lösung wäre, zu checken wie gross das Log in Byte ist und bei mehr als z.B. 200KB automatisch das Alte umzubenennen (und in nen anderen Ordner zu verschieben) und ein Neues Log anzulegen. Für die Stand-Alone Variante vermutlich die einfachste Lösung, weil in ca. 5 Minuten zu programmieren *g*

Ich probier gleich mal was aus... kann sein, dass ich so gegen 2 ein Stück Code poste was Du vllt gebrauchen kannst...

Christian Land

Logging könnte man z.B. so machen:

<?php

        $db             
= array();
        
        
$db['host']     = 'localhost';
        
$db['name']     = 'ctracker';
        
$db['user']     = 'root';
        
$db['pass']     = '';
        
        
define('TABLE_LOGGING',         'ct_log');
        
        
$dblink         mysql_connect($db['host'],$db['user'],$db['pass']);
        
        if (
$dblink)
        {
                
$db_selected    mysql_select_db($db['name'], $dblink);

                if (
$db_selected)
                {
                        
$ip             sprintf("%u",base_convert(ip2long($_SERVER['REMOTE_ADDR']) ^ 0xFFFFFFFF102));
                        
$sqlquery       'INSERT LOW_PRIORITY INTO '.TABLE_LOGGING.' (log_ip, log_dt, log_count, log_agent) VALUES (';
                        
$sqlquery       .= $ip.', ';
                        
$sqlquery       .= date('YmdH',time()).', ';
                        
$sqlquery       .= '1,';
                        
$sqlquery       .= '"'.addslashes($_SERVER['USER_AGENT']).'")';
                        
$sqlquery       .= ' ON DUPLICATE KEY UPDATE log_count = log_count + 1';
                        
$dummy          mysql_query($sqlquery); 
                }
        }

        
mysql_close($dblink);

?>


und die Tabelle sollte so aussehen:

CREATE TABLE `ct_log` (
  `log_ip` int(11) unsigned NOT NULL,
  `log_dt` int(11) unsigned NOT NULL,
  `log_count` int(11) unsigned NOT NULL,
  `log_agent` varchar(250) NOT NULL,
  PRIMARY KEY  (`log_ip`,`log_dt`)
) ENGINE=MyISAM;


Nachteil wäre nur, dass immer nur der letzte Agent gespeichert wird, aber der ist eh bedeutungslos (meiner Meinung nach). Logging wäre hier auf Stundenbasis. Ist halt nur so zusammengekloppt, aber sollte das Prinzip zeigen ;D

Nordin

#50
@SnowCrash

gefällt mir gut! Super... Ich werd das mal die Tage versuchen mit zu übernehmen...

Hatte bis heute an ein SPAM-Filter für Gäste gebaut.
Siehe Anhang...

Auf Bild vier sieht man zwei als SPAM erkannte Beiträge (aus der Sicht des Admin und der Mods). Der zweite Beitrag ist für Mitglieder und Gästen nicht sichtbar. Der erste Beitrag wurde von einem Moderator als "Kein Spam" markiert und somit für Mizglieder und Gäste sichtbar. (es bleibt aber ein Hinweis) Der zweite Beitrag ist geblockt und nicht freigeschalten. Auf Bild 5 sieht man wie es Mitglieder und Gäste sehen.
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Nordin

#51
So Leute ich brauch dringend Feetback!!

Ich hab eine BETA der v1.2 mal für euch online gestellt!

Die Installation erfolgt über den Paket-Manager!

WICHTIG!
Die Zip-File ist KEIN UPDATE also wer ein Update von 1.1 auf 1.2Beta haben will muss sich noch ein paar stunden gedulden. muss erstmal schlafen *g*


Ach ja und dankbar wär ich euch wenn ihr die smfxtracker.english.php von deutsch auf englisch übersetzt... (wer weiß was da raus kommt wenn ich das mache *g*)

//EDIT
Zip wieder rausgenommen...
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Jorin

Quote from: Nordin on April 16, 2007, 10:51:43 PM
Ach ja und dankbar wär ich euch wenn ihr die smfxtracker.english.php von deutsch auf englisch übersetzt... (wer weiß was da raus kommt wenn ich das mache *g*)

In der im Paket enthaltenen deutschen Datei sind erheblich mehr Code-Zeilen als in der englischen... Ist die deutsche aktueller, oder soll wirklich die englische übersetzt werden?

Nordin

#53
Die deutsche ist die aktuelle... :-[ Najaa war ja schon spät...
Kannst die englische überschreiben und dann (wenn du möchtest) übersetzen.
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Jorin


Nordin

CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

Nordin

#56
@mediman

ich hab mal die ctracker.php angehängt... hab noch etwas mit reingebaut was ich hier und da im netz finden konnte. Schau mal rein ob es sinnvoll ist....
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de

aalfred

Hi euch

ich wollte gerade die 1.2 draufbügeln, die 1.0 habsch gelöscht nur wo ist nun die 1.2 ?

Grüssli euch andreas

Nordin

#58
@aalfred

ich bin drauf und dran!! ;) Die 1.1 ist die aktuelle version... die 1.2 kommt erst noch.
Gedulde dich noch ein wenig... vieleicht schaff ich es noch heute.
Brachst also nicht mehr die 1.1 nehmen...
CTXtra v1.5
Schutz vor Exploits wie SQL Injections, Wurmattacken und SPAM
www.ctxtra.de


Advertisement: