VServer hing... durch Scriptkiddy's (?)

Lord_Icon

Member
Moin,

einer meiner VServer war heut früh down.
Die Logs waren schnell überflogen. Denn hier fanden sich massig Kernel Messages, mit den ich nicht wirklich was anfangen kann.

Komisch war, das unmittelbar vorher suhosin anscheind eine Datei includierung über die URL ???verhindet??? hat.

http://k-a.ru/img/safe1.txt???.php

Feb 21 05:12:08 System suhosin[27857]: ALERT - Include filename ('inhalte/kontakt//?seite=http://k-a.ru/img/safe1.txt???.php') is an URL that is not allowed (attacker '89.31.140.32', file '/srv/www/htdocs/ks0183/html/de_domain/index.php', line 359)

Wie man oben in der safe1.txt sehen kann, möchte dieses Script reichlich viele Server Statuse auslesen. Ich würde ja mal meinen, das das Suhosin verhindert hat.

Kurz danach tauchen aber immer und immer wieder genau die gleichen Kernel Messages auf. Ein Absatz habe ich mit beigelegt.

Was ist denn hie passiert ?
 

Attachments

Steht doch da recht deutlich. OoM = Out of Memory. Bedingt durch die CSS Attacke hat Dein Webserver irgendwann die Backen dicht gemacht. mod_evasive könnte Dir helfen, sowas vom Leib zu halten.

--marneus
 
ahh.... das sieht gut aus. LAut Beschreibung klingt das ja schon mal nützlich:
mod_evasive
Das Apache Modul mod_evasive soll den Apachen gegen DDos-Angriffe schützen.
mod_evasive legt die IP-Adresse des anfragenden Clients in einer internen Hash-Tabelle ab, und zählt, wie oft dasselbe Objekt innerhalb einer definierten Zeitspanne angefordert wird.
Wenn die Anzahl der Aufrufe einen bestimmten Grenzwert erreicht, erhält der Client eine 403 Fehlermeldung.



Kannst du mir hier noch was dazu sagen ?

System kernel: convert invoked oom-killer: gfp_mask=0x1200d2, order=0, oomkilladj=0

Weil: convert kenne ich nur von php, der darüber Bilder on-the-fly berechnet.
 
Wie viel Ram steht deinem Server denn zur Verfügung? Und lässt du convert auf ein grösseres Bild los?

Falls das Problem weiter besteht, sind vielleicht noch ein paar Anregungen im folgenden Thread:
 
War übrigens ein RFI Versuch, kein CSS...;)

"convert" als Linux Command macht das gleiche wie in der PHP-Funktion, z.B. Thumbnails generieren. Es war halt dieser Prozess der den oom-killer aufgerufen hat um RAM für ihn freizuschaufeln.
 
@mr_brain.
Nein. Vhost auf alle Fälle nicht.
Und "find /etc -type f|xargs grep allow url" hat nix ergeben

@jens_s
2048MB an RAM
+
2048 an Swap

@bad_brain (letzter post)
Ich habe tatsächlich viele Scripte am laufen, die Bilder skalieren.
Allerdings springen die nur an, wenn grad ein Bild hochgeladen wird.

Aber ich werd mir mal die access_log anschaun... ma gugen, ob in dieser Zeit jemand das generate_scipt genutzt hat
 
Ich hoffe, das das jetzt nicht allzusehr Off Topic wird.

Bezüglich mod_evasive finde ich das eine Klasse Idee.

Leider scheint es nur sporadisch zu klappen.

ICh mach mal Schnelldurchlauf:

yast -i apache2-devel #um das "Apache Extension Tool" (apsx) zu bekommen

cd /usr/local/src/
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz # um das Modul zu erhalten

tar xfvz mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs2 -iac mod_evasive20.c

/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -Wall -fno-strict-aliasing -DLDAP_DEPRECATED -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/apache2 -I/usr/include/apr-1 -I/usr/include/apr-1 -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
mod_evasive20.c: In function 'access_checker':
mod_evasive20.c:212: warning: implicit declaration of function 'getpid'
mod_evasive20.c:212: warning: format '%ld' expects type 'long int', but argument 3 has type 'int'
mod_evasive20.c:229: warning: ignoring return value of 'system', declared with attribute warn_unused_result
mod_evasive20.c: In function 'destroy_hit_list':
mod_evasive20.c:301: warning: control reaches end of non-void function
mod_evasive20.c: In function 'create_hit_list':
mod_evasive20.c:118: warning: control reaches end of non-void function
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_evasive20.la -rpath /usr/lib64/apache2 -module -avoid-version mod_evasive20.lo
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool' mod_evasive20.la /usr/lib64/apache2
/usr/lib64/apr-1/build/libtool --mode=install cp mod_evasive20.la /usr/lib64/apache2/
cp .libs/mod_evasive20.so /usr/lib64/apache2/mod_evasive20.so
cp .libs/mod_evasive20.lai /usr/lib64/apache2/mod_evasive20.la
PATH="$PATH:/sbin" ldconfig -n /usr/lib64/apache2
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib64/apache2

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/lib64/apache2/mod_evasive20.so
activating evasive20

vi /etc/sysconfig/apache2
Da wurde es auch automaitsch eingetragen:
APACHE_MODULES="actions alias auth_basic authn_file authz_host authz_groupfile authz_default authz_user authn_dbm autoindex cgi dir env expires include log_config mime negotiation setenvif ssl suexec userdir php5 rewrite vhost_alias mod_status evasive20"

vi /etc/apache2/sysconfig.d/loadmodule.conf
Code:
LoadModule evasive20_module               /usr/lib64/apache2/mod_evasive20.so

vi /etc/apache2/conf.d/mod_evasive.conf

Code:
<IfModule mod_evasive.c>
  #DOSHashTableSize gibt die Größe der Hashtabelle in Bytes an
  DOSHashTableSize 3097

  #DOSPageCount gibt die Anzahl der Seitenaufrufe eines Clients pro DOSPageInterval-Zeitintervall
  DOSPageCount 5

  #DOSSiteCount gibt die Anzahl der Seitenaufrufe auf einen Child-Prozess pro DOSSiteInterval-Zeitintervall
  DOSSiteCount 50

  #DOSPageIntervall und DOSSiteInterval werden in Sekunden angegeben
  DOSPageInterval 1
  DOSSiteInterval 1

  #DOSBlockingPeriod gibt die Sperrzeit in Sekunden an
  DOSBlockingPeriod 60

  #DOSEmailNotify gibts die eMail Adresse an, an welche eine Warnmail geschickt wird
  DOSEmailNotify info@<domain>.de

  #DOSSystemCommand führt bei einem Angriff weitere Programme/Scripte aus wenn gewünscht
  #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"

  #DOSWhitelist beinhaltet eine Aufzählung aller IP-Adressen für die mod_evasive NICHT gilt
  DOSWhitelist 127.0.0.1
</IfModule>

Apache restart und erstmal das test.pl ausgeführt. Da ich "DOSWhitelist 127.0.0.1" drin hab = dürfte es ja sauber durchgehen. Aber is leider nicht:
HTTP/1.1 403 Forbidden

Auch wenn ich die irgendwelche Seiten per F5 minutenlang aufrufe, werde ich nicht gespeert.

Hab ich noch was vergessen ?
 
Last edited by a moderator:
änder mal
Code:
<IfModule mod_evasive.c>
in
Code:
<IfModule mod_evasive[B]20[/B].c>
und starte den Apachen neu. Ansonsten sieht die Config gut aus.
 
Schade... dein Vorschlag klang nach => "DAS könnte es gewesen sein"

aber leider wird 127.0.0.1 dennoch gespeert. Kommt nicht einmal durch. Gleich von Anfang an 403.

Funktionieren scheint es aber:

Code:
[B]#grep Blacklisting /var/log/messages[/B]
Feb 22 11:25:18 System mod_evasive[10392]: Blacklisting address 127.0.0.1: possible DoS attack.

Wo werden denn die IP's gespeichert, die er später ablehnen soll ?
/etc/hosts.deny => da wo ich es vermuten würde is leider leer.

Ausserdem bekomm ich keine Mail. Das er die
Code:
/etc/apache2/conf.d/mod_evasive.conf
frisst, weiß ich deshalb, weil ich vorher im Kopf der Datei noch
Code:
LoadModule evasive20_module               /usr/lib64/apache2/mod_evasive20.so
drin hatte. Da meckert dann der Apache und sagt, das dieses Modul schon geladen ist. Nehm ich es raus = sauberer Durchlauf.
Nehmen tut er diese also. Nur umsetzen... damit hat das Modul wohl seine Probleme. :-(
 
hmm... meinste ?
Woher weist du das?
Der Author verliert darüber kein Wort.

Nachtrag: die Config scheint er doch nicht so zu fressen wie ich vermute. Oder aber, die Werte werden irgendwie nochmal überschrieben.

DEFAULT_LOG_DIR "/var"

Schreibt mir nach n Apachen Restart dennoch die Datei in /tmp
 
Unabhängig von mod_evasive musst du sicherstellen, dass dein Server NIE in einen Zustand kommt in dem exzessiv geswappt wird oder gar der OOM-Killer loslegt, auch nicht beim DOS-Versuch. Der wichtigste Schritt dazu ist, die Anzahl der Apache-Prozesse zu begrenzen (MaxClients).
 
Ich habe mal deine Config auf meinem Rechner zu Hause probiert (mit der kleinen Änderung auf <IfModule mod_evasive20.c>). Die gute Nachricht ist: rein prinzipiell funktioniert sie so, wie sie soll, 127.0.0.1 kann so viel machen wie er will und andere Rechner werden ausgesperrt.

Weshalb es bei dir nicht will ist erst einmal die gute Frage.

Was sagt denn der Apache, wenn du einfach mal zwischen die IfModule-Blöcke irgendeinen Blödsinn schreibst und dann versuchts, ihn neu zu starten. Wenn er die Config nimmt, dann sollte er ja meckern. Wenn er allerdings nicht meckert, müssen wir nur rausfinden, warum er dir Config nicht einliest.

Was für einen Apachen hast du denn? Prefork oder Worker? In der Readme von mod_evasive habe ich gelesen, dass jeder Apacheprozess seine eigene Tabelle mit IP's hat, die futsch sind, wenn der Apache seine Prozesse aufräumt, weil z.B. MaxRequestsPerChild erreicht wurde.
 
Ich habe mal deine Config auf meinem Rechner zu Hause probiert (mit der kleinen Änderung auf <IfModule mod_evasive20.c>).

Tatsächlich mit mod_evasive20.c?
Weil ... da ging bei mir rein garnichts. Stelle ich es um auf: mod_evasive20.so erhalte ich wenigstens ein Eintrag in die messages und unter /tmp wird ne Datei mit der IP addy angelegt.

Was für einen Apachen hast du denn? Prefork oder Worker?

#apache2ctl -V
Server version: Apache/2.2.10 (Linux/SUSE)
Server built: Dec 3 2008 13:33:50
Server's Module Magic Number: 20051115:18
Server loaded: APR 1.3.3, APR-Util 1.3.4
Compiled using: APR 1.3.3, APR-Util 1.3.4
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/srv/www"
-D SUEXEC_BIN="/usr/sbin/suexec2"
-D DEFAULT_PIDLOG="/var/run/httpd2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/accept.lock"
-D DEFAULT_ERRORLOG="/var/log/apache2/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/httpd.conf"

Bezüglich MaxRequestsPerChild werd ich gleich mal schaun. das sollte mir ja phpinfo ausgeben können.

Welches OS setzt du denn ein ?
Ich hab OpenSuse 11.1 -64Bit


Nachtrag:
Trage ich: <IfModule blödsinn> sein, und restarte den Apachen, so fährt der tatsächlich sauber und ohne zu meckern durch ***hmmm***
 
Last edited by a moderator:
Ich habe bei mir mit einem Ubuntu 8.10 32 Bit System probiert

Apache ist bei mir auch der prefork.

So sieht die Config bei mir aus:
Code:
<IfModule mod_evasive20.c>
    #DOSHashTableSize gibt die Größe der Hashtabelle in Bytes an
    DOSHashTableSize 3097

    #DOSPageCount gibt die Anzahl der Seitenaufrufe eines Clients pro DOSPageInterval-Zeitintervall
    DOSPageCount 5
    
    #DOSSiteCount gibt die Anzahl der Seitenaufrufe auf einen Child-Prozess pro DOSSiteInterval-Zeitintervall
    DOSSiteCount 50
            
    #DOSPageIntervall und DOSSiteInterval werden in Sekunden angegeben
    DOSPageInterval 1
    DOSSiteInterval 1
    
    #DOSBlockingPeriod gibt die Sperrzeit in Sekunden an
    DOSBlockingPeriod 60
                      
    #DOSEmailNotify gibts die eMail Adresse an, an welche eine Warnmail geschickt wird
#    DOSEmailNotify info@<domain>.de
    
    #DOSSystemCommand führt bei einem Angriff weitere Programme/Scripte aus wenn gewünscht
    #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
                              
    #DOSWhitelist beinhaltet eine Aufzählung aller IP-Adressen für die mod_evasive NICHT gilt
    DOSWhitelist 127.0.0.1
</IfModule>

Mit dem Blödsinn hatte ich das eher so gemeint:
Code:
<IfModule mod_evasive20.c>
...

Quark
</IfModule>
 
Last edited by a moderator:
Also.

Schreibe ich quark irgendwo hin = läuft der apache nach n restart dennnoch munter durch.

Schreibe ich den Validen Befehl:
DEFAULT_LOG_DIR /test
oder
DEFAULT_LOG_DIR "/test"

läuft der Apache auch erfolgreich durch.
perl test.pl
durchlaufen lassen => und siehe da => die Datei wird immer noch unter /tmp angelegt.

In diesen Sinne würde ich ja sagen = der ignoriert was da drin steht
 
1:
Syntax error on line 28 of /etc/apache2/conf.d/mod_evasive.conf:
Invalid command 'DEFAULT_LOG_DIR', perhaps misspelled or defined by a module not included in the server configuration

2:
#DEFAULT_LOG_DIR
=> dann fährt apache normal durch

Aber jetzt arbeitet das Modul garnicht mehr. Eine Datei wird unter /tmp nicht mehr erstellt
 
Back
Top