IT-Sicherheit

Datum: 21.05.2021

Sicherheitsinstitutionen

Zuerst müssen wir hier natürlich das Bundesamt für Sicherheit in der Informationstechnik erwähnen, das einen Grundschutzkatalog anbietet und die wichtigsten Schutzziele definiert:

  • Vertraulichkeit

  • Verfügbarkeit

  • Integrität

  • Authentizität

  • Verbindlichkeit

Anlaufstellen für Sicherheitsvorkommnisse sind jedoch eher diese Organisationen:

Manuelle Untersuchung

In Voraussetzung sollte eine Härtung der Systeme durchgeführt worden sein (unnütze Software entfernen, Nutzeraccounts und ssh-Logins mit ~/.ssh/authorized_keys überprüfen, …), danach stellt sich die Frage, welche Dienste über evl. Routing/Forwarding-Verfahren erreichbar sind.

my@bash $ telnet 10.1.1.3 25
Trying 10.1.1.3...
Connected to 10.1.1.3.
Escape character is '^]'.
220 deb-int1.haus1.tld ESMTP Postfix (Debian/GNU)
helo ichbins
250 deb-int1.haus1.tld
mail from: axel@pemmann.de
250 2.1.0 Ok
rcpt to: tux@localhost
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
Willkommen in 2021...
.
250 2.0.0 Ok: queued as E3EA2672D
quit
221 2.0.0 Bye
Connection closed by foreign host.
my@bash $
my@bash $ find /home/*/.maildir/ -cmin -3
/home/tux/.maildir/
/home/tux/.maildir/tmp
/home/tux/.maildir/new
/home/tux/.maildir/new/1609747366.M849266P545.deb-int1,S=395,W=406
/home/tux/.maildir/dovecot.index.log
/home/tux/.maildir/dovecot-uidlist
/home/tux/.maildir/dovecot.index.cache
my@bash $
my@bash $ cat /home/tux/.maildir/new/1609747366.M849266P545.deb-int1\,S\=395\,W\=406
Return-Path: <axel@pemmann.de>
X-Original-To: tux@localhost
Delivered-To: tux@localhost
Received: from ichbins (unknown [10.1.1.3])
    by deb-int1.haus1.tld (Postfix) with SMTP id E3EA2672D
    for <tux@localhost>; Mon,  4 Jan 2021 09:01:04 +0100 (CET)
Message-Id: <20210104080200.E3EA2672D@deb-int1.haus1.tld>
Date: Mon,  4 Jan 2021 09:01:04 +0100 (CET)
From: axel@pemmann.de

Willkommen in 2021...
my@bash $

Wieder auf den Host zurückgekehrt, soll von hier aus die Mail-Kommunikation getestet werden:

my@bash $ lxc exec alp-router bash
bash-4.4#
bash-4.4# ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP qlen 1000
    inet 192.168.2.103/24 scope global eth0
       valid_lft forever preferred_lft forever
8: eth1@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP qlen 1000
    inet 10.1.1.1/24 scope global eth1
       valid_lft forever preferred_lft forever
bash-4.4#
bash-4.4#
bash-4.4# iptables -t nat -vnL PREROUTING
Chain PREROUTING (policy ACCEPT 609 packets, 36974 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:993 to:10.1.1.3:993
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25 to:10.1.1.3:25
bash-4.4#
bash-4.4#

bash-4.4# ##   >> Jetzt wird klar, wie wir von SuSE aus den Mail-Server ansprechen müssen: via 192.168.2.103 und Port 25.
bash-4.4#

my@bash $ ## Versuchen wir nun wieder vom SuSE-Host aus, den Mail-Server zu erreichen:
my@bash $ telnet 192.168.2.103 25
Trying 192.168.2.103...
Connected to 192.168.2.103.
Escape character is '^]'.
220 deb-int1.haus1.tld ESMTP Postfix (Debian/GNU)
ehlo pemmann.de
250-deb-int1.haus1.tld
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
quit
221 2.0.0 Bye
Connection closed by foreign host.
my@bash $
my@bash $ ##    >> Alles OK.

Auf dem Alp-Router Updates und das vollständige ‚lsof‘-Kommando installieren:

my@bash $ apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
v3.9.6-134-g6ba14936d5 [http://dl-cdn.alpinelinux.org/alpine/v3.9/main]
v3.9.6-135-g2b576c0b2c [http://dl-cdn.alpinelinux.org/alpine/v3.9/community]
OK: 9774 distinct packages available
my@bash $
my@bash $ apk upgrade
OK: 57 MiB in 80 packages
my@bash $
my@bash $ apk -dv search lsof
lsof-doc-4.91-r0 - LiSt Open Files (documentation)
lsof-4.91-r0 - LiSt Open Files
my@bash $
my@bash $ ls -l /usr/bin/lsof
lrwxrwxrwx    1 root     root            12 Aug 20 10:00 /usr/bin/lsof -> /bin/busybox
my@bash $
my@bash $ apk add lsof
(1/1) Installing lsof (4.91-r0)
Executing busybox-1.29.3-r10.trigger
OK: 57 MiB in 81 packages
my@bash $
my@bash $ ls -l /usr/bin/lsof
-rwxr-xr-x    1 root     root        142456 Dec 19  2018 /usr/bin/lsof
my@bash $
my@bash $ ##    >> Deutlich zu sehen: lsof ist nun ein standalone-Kommando.
my@bash $
my@bash $ lsof -i -Pn
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhcpd   428 dhcp    8u  IPv4  34727      0t0  UDP *:67
sshd    491 root    3u  IPv4  36454      0t0  TCP *:22 (LISTEN)
sshd    491 root    4u  IPv6  36456      0t0  TCP *:22 (LISTEN)
my@bash $
my@bash $ ##    >> Dieser minimale Router führt lediglich einen DHCP-Client und den SSHD aus.
my@bash $
my@bash $ ## Dies zur Sicht von innen heraus (iptables: "lokale Prozesse").

Wir testen nun vom „Internet“ aus, was der Router zuzüglich iptables/PREROUTING anbietet:

my@bash $ ## __Auf SusiLeap.haus1.tld (LXD-Host + Master DNS)__
my@bash $ /bin/su -
Passwort:
my@bash $
my@bash $ nmap -PN -F 192.168.2.103
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-04 09:24 CET
Nmap scan report for 192.168.2.103
Host is up (0.000014s latency).
Not shown: 97 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
993/tcp open  imaps
MAC Address: 00:16:3E:DC:92:41 (Xensource)

Nmap done: 1 IP address (1 host up) scanned in 1.56 seconds
my@bash $
my@bash $ ##    >> Die war ein Default TCP-Scan (-sT)
my@bash $

my@bash $
my@bash $ nmap -PN -F -sU 192.168.2.103
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-04 09:25 CET
Stats: 0:00:22 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 42.56% done; ETC: 09:26 (0:00:31 remaining)
Stats: 0:00:34 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 52.89% done; ETC: 09:26 (0:00:31 remaining)

my@bash $ nmap -PN -F -sU 192.168.2.103
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-04 09:25 CET
Stats: 0:00:22 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 42.56% done; ETC: 09:26 (0:00:31 remaining)
Stats: 0:00:34 elapsed; 0 hosts completed (1 up), 1 undergoing UDP Scan
UDP Scan Timing: About 52.89% done; ETC: 09:26 (0:00:31 remaining)
Nmap scan report for 192.168.2.103
Host is up (0.00011s latency).
Not shown: 99 closed ports
PORT   STATE         SERVICE
67/udp open|filtered dhcps
MAC Address: 00:16:3E:DC:92:41 (Xensource)

Nmap done: 1 IP address (1 host up) scanned in 103.36 seconds
my@bash $

Auf dem internen Debian-Mail-Server einen Port testweise/“versehentlich“ öffnen:

my@bash $ apt-get install netcat-openbsd

my@bash $ #   OK.
my@bash $
my@bash $ nc -l -p 80 -v
Listening on [0.0.0.0] (family 2, port 80)

Nun Testen wir wieder mit dem Portscanner, geben allerdings die Portnummern an:

my@bash $ ## __Auf SusiLeap.haus1.tld (LXD-Host + Master DNS)__
my@bash $ nmap -PN -p22,25,80,135,137-139,143,993 192.168.2.103
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-04 09:57 CET
Nmap scan report for 192.168.2.103
Host is up (0.000064s latency).

PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  open   smtp
80/tcp  closed http
135/tcp closed msrpc
137/tcp closed netbios-ns
138/tcp closed netbios-dgm
139/tcp closed netbios-ssn
143/tcp closed imap
993/tcp open   imaps
MAC Address: 00:16:3E:DC:92:41 (Xensource)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
my@bash $
my@bash $
my@bash $ ##    >> Port 80 ist weder auf dem Router selber noch via PREROUTING aktiv.  :-)

Testweise den Port 80 weiterleiten (PAT):

my@bash $ hostname -f
alp-router.haus1.tld
my@bash $
my@bash $ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.1.1.3:80
my@bash $
my@bash $ iptables -t nat -vnL PREROUTING
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2    88 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:993 to:10.1.1.3:993
    3   148 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:25 to:10.1.1.3:25
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:10.1.1.3:80
my@bash $

Wir testen wiederum vom SuSE-Host aus:

my@bash $ nmap -PN -p80 192.168.2.103
Starting Nmap 7.70 ( https://nmap.org ) at 2021-01-04 10:02 CET
Nmap scan report for 192.168.2.103
Host is up (0.00013s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 00:16:3E:DC:92:41 (Xensource)

Nmap done: 1 IP address (1 host up) scanned in 0.54 seconds
my@bash $

Automatische Sicherheitssysteme

Grundbegriffe

Eine sinnvolle Unterteilung:

  • Intrusion Prevention System (IPS): vorbeugendes Verhindern von Einbrüchen (z.B. fail2ban, artillery)

  • Host based Intrusion Detection System (HIDS): Überwachung des lokalen Hosts mit seinen Dateien (z.B. aide, tripwire)

  • Network based Intrusion Detection System (NIDS): Überwachung des lokalen Netzwerks (z.B. snort, suricata, prelude)

Spezielle iptables-Regeln

  • Grundpolicy DROP nutzen: iptables -P INPUT DROP

  • SPI-Regeln für den OUTPUT nutzen: iptables ... -m conntrack --ctstate ESTABLISHED,RELATED ...

  • Limitierung von eintreffenden Datenpaketen: iptables ... -m limit --limit 3/hour --limit-burst 3 ...

Siehe dazu auch: