Gehaxelts Blog

IT-Security & Hacking

Uberspace Logscanner

Für einen Webseitenbetreiber ist es wichtig zu wissen, ob seine Webanwendung Sicherheitsmängel aufweist und sollte deswegen diese oft darauf überprüfen. Jedoch ist es nicht immer möglich eine 100% Sicherheit zu gewährleisten und wenn ein Fehler eines großen CMSses wie Wordpress noch nicht publik ist oder er eine Schwachstelle übersehen hat, kann es zu einem Angriff durch Hacker kommen.

Diese verschaffen sich dann Zugriff auf die Anwendung und hinterlassen sowenig Spuren wie möglich, sodass der Webmaster optisch keine Änderung bemerkt. Technisch bietet ihm der access_log, in dem jegliche Zugriffe protokolliert werden, eine Anlaufstelle, denn dort werden dann auch die Zugriffe der Angreifer protokolliert.

Auf Uberspace hat der Nutzer nur lesenden Zugriff auf diese Logdateien, sodass der Angreifer seine Spuren nicht komplett verwischen kann, und das hilft ungemein.

Ich habe ein kleines  Shellscript geschrieben, welches die access_log auf die bekanntesten Angriffsmuster (SQL Injection, Cross Site Scripting, Local File Inclusion)  prüft und die Ergebnisse in einer Datei abspeichert.

Source:

#!/bin/bash
###Logscanner by Sebastian Neef
###www.gehaxelt.in
###Version 1.0

##Variables
RESULTFILE='scan.log'
##END Variables

##Check if parameter is set
if [ $1 ]
then
    SCANFILE=$1
else
    SCANFILE='logs/access_log' #Uberspace access_log path from ~
    echo "Assuming that the path of access_log is logs/access_log."
    echo "You can change the path over the first parameter"
fi
##END Check

##Check if file exists
if [ ! -f $SCANFILE ]
then
    echo "File does not exist"
    exit 1
fi
##END Check

##Preparing logfile
echo "##########" >> $RESULTFILE
echo "Starting new scan at "$(date +%d-%m-%Y-%R) >> $RESULTFILE
echo "Scanning $SCANFILE" >> $RESULTFILE
echo "##########" >> $RESULTFILE
##Preparing logfile

##Scan for SQL Injections
echo "Scanning for SQL Injections" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E 'table_name|substring|union|column_name|from' >> $RESULTFILE
##END Scan

##Scan for Cross Site Scripting (XSS)
echo "Scanning for Cross Site Scripting (XSS)" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E '\<script\>|alert|src\=|String\.FromCharCode|document\.write' >> $RESULTFILE
##END Scan

##Scan for Local File Inclusion (LFI)
echo "Scanning for Local File Inclusion (LFI)" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E '\.\.\/|\/etc\/passwd|\/etc\/group|php\:\/\/filter|%00' >> $RESULTFILE
##END Scan

##Finish
echo "Finished scan" >> $RESULTFILE
##END Finish

Was macht das Script?

Das Script zunächst davon aus, das es im Homeverzeichnis des Übernauten liegt und dort ausgeführt wird, sodass das der Pfad zur Logdatei logs/access_log lautet. Sollte das nicht so sein, so kann man den Pfad zur Logdatei über den ersten Parameter übergeben.

Danach prüft es, ob die angegebene Datei existiert, damit die weiteren Prüfungen durchgeführt werden können. Ist dies der Fall so wird die Ergebnisdatei mit dem Namen “scan.log” angelegt und dort dann der Scan-Header eingetragen.

Der Hauptteil folgt darauf, bei dem das Script nach den o.g. Angriffsmustern per Keywords in den aufgerufenen URLs der access_log sucht und die Ausgaben in der Ergebnisdatei gespeichert werden, sodass der Webmaster am Ende einer Prüfung sich nur die letzten Zeilen dieser Datei anschauen muss, um festzustellen, ob Unregelmäßigkeiten vorhanden sind.

Automatisierung

Man kann das Script nach einem Download per

cd ~
wget 'https://gehaxelt.in/blog/wp-content/uploads/2012/04/logscanner.sh_.txt' -O logscanner.sh

heruntergeladen werden und danach genügt ein

sh logscanner.sh

um das Script zu starten.

Möchte man nun das Script automatisieren, so nutzt man am Besten die Cronjobs. Möchte man sich dazu einen neuen einrichten, so führt man folgenden Befehl aus:

crontab -e

und fügt dort die folgende Zeile an.

0 07 * * * sh /home/gehaxelt/logscanner.sh

Ich wähle hier die Uhrzeit 7 Uhr, da dort die Serverauslastung diese Scanvorgänge locker wegpackt und die nächtlichen Hacking-Sessions der Angreifer bestimmt vorüber sind ;)

Mit einem Strg+X und einem Abnicken mit Y ist der neue Cronjob.

Was nun?

Ich hoffe für euch, das dieses Script bei euch keine Ausgabe erzeugt, ansonsten seid ihr Opfer eines Angriffes geworden. Ihr solltet euch trotzdem täglich die Ergebnisdatei einmal anschauen, um zu prüfen, ob irgendwas dazugekommen ist.

Update

Sven-Erik Neve war so nett, hat das Script ein wenig angepasst und mir erlaubt, dies hier vorzustellen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
###Logscanner by Sebastian Neef modified by Sven-Erik Neve
###www.gehaxelt.in
###Version 1.1

##Variables
RESULTFILE='scan.log'
##END Variables

##Check if parameter is set
if [ $1 ]
then
    SCANFILE=$1
else
    SCANFILE='logs/access_log' #Uberspace access_log path from ~
    echo "Assuming that the path of access_log is logs/access_log."
    echo "You can change the path over the first parameter"
fi
##END Check

##Check if file exists
if [ ! -f $SCANFILE ]
then
    echo "File does not exist" 1>&2
    exit 1
fi
##END Check

##Preparing logfile
echo "##########" >> $RESULTFILE
echo "Starting new scan at "$(date +%d-%m-%Y-%R) >> $RESULTFILE
echo "Scanning $SCANFILE" >> $RESULTFILE
echo "##########" >> $RESULTFILE
##Preparing logfile

##Scan for SQL Injections
echo "Scanning for SQL Injections" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E 'table_name|substring|union|column_name|from' >> $RESULTFILE && echo "SQL Injection entdeckt" 1>&2
##END Scan

##Scan for Cross Site Scripting (XSS)
echo "Scanning for Cross Site Scripting (XSS)" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E '\<script\>|alert|src\=|String\.FromCharCode|document\.write' >> $RESULTFILE && echo "Cross Site Scripting entdeckt" 1>&2
##END Scan

##Scan for Local File Inclusion (LFI)
echo "Scanning for Local File Inclusion (LFI)" >> $RESULTFILE
cat $SCANFILE | cut -d' ' -f-7 | grep -i -E '\.\.\/|\/etc\/passwd|\/etc\/group|php\:\/\/filter|%00' >> $RESULTFILE && echo "Local File Inclusion entdeckt" 1>&2
##END Scan

##Finish
echo "Finished scan" >> $RESULTFILE
##END Finish

Vielen Dank Sven(-Erik) !

Gruß

gehaxelt

Tools

« Auf der sicheren Seite CD-Key eines nicht bootfähigen Windows recovern »