Blacklisting eines Servers, obwohl der ausgehende Mailverkehr via Maillog oder MailQ nichts vemuten lässt: Unterschied zwischen den Versionen

Aus Glaskugel
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 55: Zeile 55:
:perl    18671 gkaterelos    2w  CHR        1,3      0t0 704314 /dev/null
:perl    18671 gkaterelos    2w  CHR        1,3      0t0 704314 /dev/null
:perl    18671 gkaterelos    3r  REG 182,219777    75439  64395 /tmp/d1 (deleted)
:perl    18671 gkaterelos    3r  REG 182,219777    75439  64395 /tmp/d1 (deleted)
''':perl    18671 gkaterelos    4u  IPv4  920889604      0t0    TCP *:37002 (LISTEN)'''
:'''perl    18671 gkaterelos    4u  IPv4  920889604      0t0    TCP *:37002 (LISTEN)'''


Da wurde anscheinend /tmp/d1 (wahrscheinlich ein Perl-Script) gestartet und danach gelöscht.
Da wurde anscheinend /tmp/d1 (wahrscheinlich ein Perl-Script) gestartet und danach gelöscht.
Zeile 100: Zeile 100:


Dieser Kunde scheint also eine Lücke in seiner Applikation zu haben, über diese wurde das Perl-Script hochgeladen und gestartet.
Dieser Kunde scheint also eine Lücke in seiner Applikation zu haben, über diese wurde das Perl-Script hochgeladen und gestartet.
Das laufende Script habe ich nun hart beendet (kill -9).
Das laufende Script habe ich dann hart beendet (kill -9).
 
Ein Delisting bei der CBL ist derzeit nicht möglich, da zuviele Delistings versucht wurden. Ich denke, dass die CBL die wichtige Blacklist ist.


Ein switchen der IP-Adresse ist mit Plesk tatsächlich garnicht so einfach. Ich habe hierfür eine iptables-Regel gesetzt nachdem dogado dem server eine zweite/neue IP zugewiesen hat:
Ein switchen der IP-Adresse ist mit Plesk tatsächlich garnicht so einfach. Ich habe hierfür eine iptables-Regel gesetzt nachdem dogado dem server eine zweite/neue IP zugewiesen hat:

Aktuelle Version vom 7. Januar 2021, 17:52 Uhr

Es ist durchaus möglich, dass PHP-Code auch einen Mailserver simuliert und somit über die Hintertür der Server für ausgehenden mailtraffic missbraucht wird.

Zunächst mal muss also ein iptabels regelwerk errichtet werden, welches ausgehenden Traffic explizit erlaubt oder eben auch unterbindet und des Rest loggt. Dieses regelwerk könnte be einer Spam Problematik also so aussehen:

iptables -A OUTPUT -m owner --gid-owner postfix -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner root -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 25 -m state --state NEW -j LOG --log-uid --log-prefix "LOCAL_DROPPED_SPAM "
iptables -A OUTPUT -p tcp -m tcp --dport 25 -j REJECT --reject-with icmp-port-unreachable

Damit dürfen nur postfix und root E-Mails versenden. Alle anderen werden werden geloggt. Sollten Kunden der Meinung sein, über ihre eigene Applikation Mails versenden zu wollen, müssen sie Port 587 benutzen.

nahdem diese Regeln installiert sind bekommt man eine wunderbar große Log-Datei mit bspw. folgendem Inhalt

May 28 16:19:04 www44 kernel: [962487.665876] LOCAL_DROPPED_SPAM IN= OUT=venet0 SRC=37.218.252.192 DST=41.216.186.158 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=30354 DF PROTO=TCP SPT=43862 DPT=25 WINDOW=42340 RES=0x00 SYN URGP=0 UID=10089 GID=503
May 28 16:19:08 www44 kernel: [962491.675908] LOCAL_DROPPED_SPAM IN= OUT=venet0 SRC=37.218.252.192 DST=41.216.186.158 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=36351 DF PROTO=TCP SPT=46036 DPT=25 WINDOW=42340 RES=0x00 SYN URGP=0 UID=10089 GID=503


Diese Datei führt zum Benutzer mit der ID 10089 und dessen Prozesse lassen sich dann anzeigen

ps aux | grep -E '^(10089|USER)'

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
10089 2423 4.0 0.0 139580 6952 ? Ss May25 206:55 ramf
10089 2424 3.9 0.0 139736 7296 ? Ss May25 201:36 ramf
10089 2425 4.9 0.0 139396 6716 ? Ss May25 250:29 ramf
10089 18671 0.3 0.1 247708 19636 ? Ss 08:13 0:00 ramf
10089 27005 0.4 0.0 136672 5192 ? Ss 09:09 0:00 ramf

Mit der Prozess-ID kann man etwas anfangen (exemplarisch für die 18671)

lsof -np 18671

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
perl 18671 gkaterelos cwd DIR 182,219777 4096 2 /
perl 18671 gkaterelos rtd DIR 182,219777 4096 2 /
perl 18671 gkaterelos txt REG 182,219777 7184 527131 /usr/bin/perl
perl 18671 gkaterelos mem REG 182,219777 21056 131378 /usr/lib64/perl5/auto/File/Glob/Glob.so
perl 18671 gkaterelos mem REG 182,219777 120008 131414 /usr/lib64/perl5/auto/POSIX/POSIX.so
perl 18671 gkaterelos mem REG 182,219777 17976 131375 /usr/lib64/perl5/auto/Fcntl/Fcntl.so
perl 18671 gkaterelos mem REG 182,219777 25624 131595 /usr/lib64/perl5/auto/Socket/Socket.so
perl 18671 gkaterelos mem REG 182,219777 19336 131395 /usr/lib64/perl5/auto/IO/IO.so
perl 18671 gkaterelos mem REG 182,219777 99158720 535398 /usr/lib/locale/locale-archive-rpm
perl 18671 gkaterelos mem REG 182,219777 10312 393225 /lib64/libfreebl3.so
perl 18671 gkaterelos mem REG 182,219777 1924768 393235 /lib64/libc-2.12.so
perl 18671 gkaterelos mem REG 182,219777 143280 393259 /lib64/libpthread-2.12.so
perl 18671 gkaterelos mem REG 182,219777 15056 393267 /lib64/libutil-2.12.so
perl 18671 gkaterelos mem REG 182,219777 40872 393239 /lib64/libcrypt-2.12.so
perl 18671 gkaterelos mem REG 182,219777 596864 393243 /lib64/libm-2.12.so
perl 18671 gkaterelos mem REG 182,219777 20024 393241 /lib64/libdl-2.12.so
perl 18671 gkaterelos mem REG 182,219777 113904 393245 /lib64/libnsl-2.12.so
perl 18671 gkaterelos mem REG 182,219777 111440 393261 /lib64/libresolv-2.12.so
perl 18671 gkaterelos mem REG 182,219777 1485896 131143 /usr/lib64/perl5/CORE/libperl.so
perl 18671 gkaterelos mem REG 182,219777 159312 393228 /lib64/ld-2.12.so
perl 18671 gkaterelos 0r CHR 1,3 0t0 704314 /dev/null
perl 18671 gkaterelos 1w CHR 1,3 0t0 704314 /dev/null
perl 18671 gkaterelos 2w CHR 1,3 0t0 704314 /dev/null
perl 18671 gkaterelos 3r REG 182,219777 75439 64395 /tmp/d1 (deleted)
perl 18671 gkaterelos 4u IPv4 920889604 0t0 TCP *:37002 (LISTEN)

Da wurde anscheinend /tmp/d1 (wahrscheinlich ein Perl-Script) gestartet und danach gelöscht. Das Script lauscht auf Port 37002 und nimmt darüber wahrscheinlich Befehle entgegen. Mit den Meldungen aus dem angehangen Logfile gehe ich davon aus, dass darüber dann direkt die Mails versendet werden. Es wird also nicht die lokale Mail-Funktion benutzt.

Wenn man direkt noch in /tmp nach den Dateien dieses Users schaut:

ls -la /tmp/ | awk '$3 == "gkaterelos"'

-rw-r--r-- 1 gkaterelos psacln 5347980 May 27 22:28 js_composer1558988904.zip
-rw------- 1 gkaterelos psacln 404763 May 24 13:16 php0Uxh1H
-rw------- 1 gkaterelos psacln 408159 May 24 11:18 php3jvj5M
-rw------- 1 gkaterelos psacln 404799 May 24 13:17 php4F0nx2
-rw------- 1 gkaterelos psacln 404787 May 24 10:19 php74SYUL
-rw------- 1 gkaterelos psacln 404839 May 24 13:15 phpb469E9
-rw------- 1 gkaterelos psacln 404785 May 24 13:06 phpBiSjrs
-rw------- 1 gkaterelos psacln 404777 May 24 10:28 phpCxmxxu
-rw------- 1 gkaterelos psacln 404773 May 24 11:11 phpDcCK09
-rw------- 1 gkaterelos psacln 408181 May 24 10:11 phph2oJpm
-rw------- 1 gkaterelos psacln 404749 May 24 15:01 phpHFaNXP
-rw------- 1 gkaterelos psacln 404809 May 24 10:35 phpHHsohO
-rw------- 1 gkaterelos psacln 408179 May 24 10:40 phpHviK7L
-rw------- 1 gkaterelos psacln 404803 May 24 10:40 phpkjpmtT
-rw------- 1 gkaterelos psacln 404769 May 24 12:25 phpp1Gyhj
-rw------- 1 gkaterelos psacln 404787 May 24 14:54 phpPd2wHn
-rw------- 1 gkaterelos psacln 404787 May 24 12:16 phppHLEDq
-rw------- 1 gkaterelos psacln 405051 May 26 01:14 phpPWi3MK
-rw------- 1 gkaterelos psacln 408217 May 24 21:11 phpQxfBzl
-rw------- 1 gkaterelos psacln 404795 May 24 13:06 phpRe2YGT
-rw------- 1 gkaterelos psacln 408197 May 24 12:52 phpSQwQYx
-rw------- 1 gkaterelos psacln 408155 May 24 10:11 phpTbGuMR
-rw------- 1 gkaterelos psacln 408181 May 24 14:15 phpU9lkfi
-rw------- 1 gkaterelos psacln 404811 May 24 10:29 phpuOF11H
-rw------- 1 gkaterelos psacln 404795 May 24 10:18 phpvVEB1i
-rw------- 1 gkaterelos psacln 404757 May 24 12:31 phpxCB065
-rw------- 1 gkaterelos psacln 404787 May 24 14:43 phpxQJPpH
-rw-r----- 1 gkaterelos psacln 4 May 23 15:16 [stealth].pid


Der User gkaterelos führt zu seinem Homeverzeichnis und damit auch zu dem Benutzer:

echo ~gkaterelos

/var/www/vhosts/gkaterelos.www44.hostkraft.de

Dieser Kunde scheint also eine Lücke in seiner Applikation zu haben, über diese wurde das Perl-Script hochgeladen und gestartet. Das laufende Script habe ich dann hart beendet (kill -9).

Ein switchen der IP-Adresse ist mit Plesk tatsächlich garnicht so einfach. Ich habe hierfür eine iptables-Regel gesetzt nachdem dogado dem server eine zweite/neue IP zugewiesen hat:

iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source 37.218.252.206

Alle Verbindungen zum Zielport 25 werden über die IP-Adresse 37.218.252.206 gesendet.