Sicherheit von Linux-Systemen - uni-muenster.de · Sicherheit von Linux-Systemen Sicherheit von...
Transcript of Sicherheit von Linux-Systemen - uni-muenster.de · Sicherheit von Linux-Systemen Sicherheit von...
Sicherheit von Linux-Systemen
Sicherheit von Linux-SystemenKonfiguration von SuSE Linux Professional 9.3
Christian Muck-Lichtenfeld
Organisch-Chemisches Institut
July 11, 2005
Sicherheit von Linux-Systemen
Uberblick
Ziele:
• Gefahren erkennen
• System sicher konfigurieren
• Angriffe erkennen (bzw. verhindern)
Zielgruppe: Linux-Einsteiger, Admins mit Linux als Ausnahmefall
Beispiel: SuSE Professional 9.3
keine Themen: WLAN, Authentifizierung, Samba
Sicherheit von Linux-Systemen
Bedrohungsanalyse
Potentielle Angriffswege
• Lokaler Angriff
Angemeldeter Benutzer nutzt Schwachstellen aus und fuhrt unerwunschte Aktivitaten ausZiel: (root-) Privilegien erlangen, die einem normalen Benutzer nicht zustehen
• DOS-Angriff (denial of service)
Verteilte gehaufte Abfrage von Diensten fuhrt zu Uberlastung des Rechners
• Netzattacken
Angriff uber einen unsicheren Netz-Zugang zum Systemauf einen Dienst, der nicht laufen musste oder der Sicherheitslucken hat.
• spoofing (’man-in-the-middle’)
Angreifer gibt vor, ein (autorisiertes) System im Netz zu sein
z.B. arp-spoofing, SSH-Angriff
In allen Fallen werden Sicherheitslucken ausgenutzt (→ exploits)
Sicherheit von Linux-Systemen
Bedrohungsanalyse
Angriffswege
Viele Wege fuhren zum Ziel des Hackers(Privilegierte Bereiche/Programme)
USERSPACE
KERNELSPACE
root
PRIV
Application
Service Port
LOKALER ANGRIFF DOS
NETZANGRIFF
SPOOFING(MAN IN THE MIDDLE)
Sicherheit von Linux-Systemen
Bedrohungsanalyse
Angriffsszenarien
• Spionage (Passworter, Daten allgemein)
• Missbrauch des Rechners (Filesharing, Spam-Mailer, Angriff aufweitere Rechner)
• Zerstorung von Daten
Sicherheit von Linux-Systemen
Gegenmassnahmen
Sicherheitslucken kennen
Advisories (zur Sicherheit) bei www.linux-community.de
• Literaturz.B. Linux-Magazin (www.linux-magazin.de)linux hacker’s guide (Markt & Technik)Linux Security Cookbook (O’Reilly)
• Eigenen Rechner uberprufenverdachtige Prozesse, Dateien, Ports
Sicherheit von Linux-Systemen
Gegenmassnahmen
Logfiles analysieren
Uberwachung der Logfiles
• syslogd erzeugt Ausgabe in /var/log/messages
• Befehl z.B. grep -i connect /var/log/messages
Jun 16 16:17:44 nwztux portmap[22117]: connect from 128.176.245.69 to getport(mountd): request from unauthorized host
Jun 16 16:17:44 nwztux portmap[22118]: connect from 128.176.245.69 to getport(mountd): request from unauthorized host
Jun 16 16:18:23 nwztux sshd[22119]: refused connect from ::ffff:128.176.245.69 (::ffff:128.176.245.69)
Jun 18 02:13:33 nwztux sshd[25380]: refused connect from ::ffff:60.28.0.162 (::ffff:60.28.0.162)
Jun 18 03:09:41 nwztux sshd[25459]: refused connect from ::ffff:221.251.21.162 (::ffff:221.251.21.162)
Jun 18 18:54:07 nwztux sshd[26780]: refused connect from ::ffff:65.166.159.14 (::ffff:65.166.159.14)
Jun 18 23:10:25 nwztux sshd[27099]: refused connect from ::ffff:200.68.112.137 (::ffff:200.68.112.137)
Jun 18 23:18:59 nwztux sshd[27119]: refused connect from ::ffff:200.68.112.137 (::ffff:200.68.112.137)
Jun 19 11:42:58 nwztux sshd[28326]: refused connect from ::ffff:211.202.3.150 (::ffff:211.202.3.150)
Jun 20 20:25:47 nwztux sshd[31388]: refused connect from ::ffff:211.202.3.150 (::ffff:211.202.3.150)
• Tools zur Logfile-Uberwachung:
• Analog (http://www.analog.cx/)• Swatch (http://swatch.sourceforge.net/)• LogSurfer
Sicherheit von Linux-Systemen
Gegenmassnahmen
Prozesse uberwachen
Uberwachung der Prozesse
• Befehl ps -ef |grep Username zeigt die Prozesse des Users aniltis:~ # ps -ef |grep nobody
nobody 7189 1 0 08:25 ? 00:00:00 /sbin/portmap
nobody 7198 1 0 08:25 ? 00:00:00 /usr/sbin/mdnsd -f /etc/rendezvous.conf -b
root 12610 8377 0 10:38 pts/7 00:00:00 grep nobody
• Befehl strace -p PID verfolgt die Systemaufrufe des Prozesses→ Analyse der Aktivitat eines verdachtigen Prozessesiltis:~ # strace -p 7198
Process 7198 attached - interrupt to quit
select(7, [3 4 5 6], NULL, NULL, 1, 446000) = 0 (Timeout)
rt sigprocmask(SIG BLOCK, [HUP INT USR1 PIPE TERM], NULL, 8) = 0
rt sigprocmask(SIG UNBLOCK, [HUP INT USR1 PIPE TERM], NULL, 8) = 0
gettimeofday({1119429587, 826316}, NULL) = 0
gettimeofday({1119429587, 826367}, NULL) = 0
gettimeofday({1119429587, 826410}, NULL) = 0
gettimeofday({1119429587, 826453}, NULL) = 0
gettimeofday({1119429587, 826496}, NULL) = 0
select(7, [3 4 5 6], NULL, NULL, 5, 0) = 0 (Timeout)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Netzwerkverbindungen uberwachen
Uberwachung der Netzverbindungen des lokalen Rechners
• Befehl z.B. lsof -i -n -Piltis:/usr/sbin lsof -i -n -P
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
dhcpcd 6625 root 4u IPv4 18524 UDP *:68
portmap 7210 nobody 3u IPv4 19793 UDP *:111
portmap 7210 nobody 4u IPv4 19806 TCP *:111 (LISTEN)
mysqld-ma 7430 mysql 3u IPv4 21059 TCP *:3306 (LISTEN)
master 7561 root 11u IPv4 21266 TCP 127.0.0.1:25 (LISTEN)
master 7561 root 12u IPv6 21267 TCP [::1]:25 (LISTEN)
sshd 7746 root 3u IPv6 22081 TCP *:22 (LISTEN)
ssh 8226 meier 3u IPv4 23577 TCP 127.0.0.1:12051->127.0.0.1:22 (ESTABLISHED)
sshd 8230 root 3u IPv6 23578 TCP 127.0.0.1:22->127.0.0.1:12051 (ESTABLISHED)
sshd 8230 root 6u IPv4 23632 TCP 127.0.0.1:6010 (LISTEN)
sshd 8230 root 7u IPv6 23633 TCP [::1]:6010 (LISTEN)
sshd 8230 root 11u IPv4 69274 TCP 127.0.0.1:6010->127.0.0.1:11316 (ESTABLISHED)
cupsd 10373 lp 0u IPv4 28016 TCP *:631 (LISTEN)
cupsd 10373 lp 2u IPv4 28017 UDP *:631
fwbuilder 18895 root 3u IPv4 69273 TCP 127.0.0.1:11316->127.0.0.1:6010 (ESTABLISHED)
firefox-b 19302 meier 26u IPv4 70013 TCP 128.176.245.32:26706->128.176.188.115:80 (ESTABLISHED)
• oder netstat -t (TCP) (-u (UDP))iltis:~ # netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 ILTIS.UNI-MUENSTER:9097 DOEDEL.UNI-MUENSTER:ssh ESTABLISHED
tcp 0 0 localhost:21838 localhost:ssh ESTABLISHED
tcp 0 0 localhost:44216 localhost:filenet-tms ESTABLISHED
tcp 0 0 localhost:filenet-tms localhost:44216 ESTABLISHED
tcp 0 0 localhost:ssh localhost:21838 ESTABLISHED
tcp 0 0 ILTIS.UNI-MUENSTER.:ssh MRBEAN.UNI-MUENST:33521 ESTABLISHED
Sicherheit von Linux-Systemen
Gegenmassnahmen
Dateisystem uberwachen
Uberwachung des Dateisystems (Intrusion detection)
• z.B. tripwire (http://sourceforge.net/projects/tripwire/)
• erzeugt ”Fingerabdrucke” der wichtigen Systemdateien• speichert die Daten in einer Datenbank• findet Abweichungen vom gespeicherten ’Snapshot’
• Dateisystemuberwachung simpel: rpm-Datenbank
iltis:/usr/sbin # rpm -V samba-3.0.13-1.1
S.5....T /usr/sbin/smbd
iltis:/usr/sbin #
• Uberprufung / Suche nach rootkits:chkrootkit (http://www.chkrootkit.org/)(z.Zt. 57 rootkits/Wurmer) ≡ Stinger von McAffee
Sicherheit von Linux-Systemen
Gegenmassnahmen
Useraktivitaten beobachten
Uberwachung der Useraktivitat
Befehl lastlog
iltis:~ # lastlog
Username Port From Latest
root pts/7 localhost Wed Jun 22 09:00:45 +0200 2005
bin **Never logged in**
daemon **Never logged in**
lp **Never logged in**
mail **Never logged in**
news **Never logged in**
uucp **Never logged in**
games **Never logged in**
man **Never logged in**
at **Never logged in**
wwwrun pts/8 iltis.uni-muenst Wed Jun 22 09:01:10 +0200 2005
ftp **Never logged in**
named **Never logged in**
postfix **Never logged in**
mysql **Never logged in**
sshd **Never logged in**
ntp **Never logged in**
messagebus **Never logged in**
haldaemon **Never logged in**
gsc **Never logged in**
meier :0 console Wed Jun 22 08:35:46 +0200 2005
Sicherheit von Linux-Systemen
Gegenmassnahmen
Abwehr eines lokalen Angriffs
Abwehr eines lokalen Angriffs
• nur vertrauenswurdige Benutzer zulassen
• keine anonymen Accounts
• Server nicht physikalisch offentlich zuganglich machen
• Server nicht fur normale User zum Login offnen
• keine Root-Shells offenlassenz.B. in der bash mit ”export TMOUT=180” logout nach 3 Minuten Inaktivitat
• regelmassige Systemupdates durchfuhren
• sichere Grundeinstellungen (yast2)
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
Local Security Configurationyast2 security
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
Passwort-Einstellungen
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
Reboot durch User verhindern
Rechner sollte auch physikalisch unzuganglich sein !
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
Login Einstellungen
Delay verhindert Passwort-Rateversuche
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
User ID und Group ID
Sicherheit von Linux-Systemen
Gegenmassnahmen
SuSE Grundeinstellungen zur Sicherheit
Yast2 Sicherheit
Dateirechte und Pfade
Sicherheit von Linux-Systemen
Gegenmassnahmen
Systemupdates
Manueller Systemupdate
Start des manuellen Systemupdates (YOU = Yast Online Update)yast2 online update , Auswahl des Servers
Sicherheit von Linux-Systemen
Gegenmassnahmen
Systemupdates
Manueller Systemupdate
Auswahl der Patches (Sicherheitsrelevant: rot)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Systemupdates
Automatischer Systemupdate
Konfiguration des Updatezeitpunktes:
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Netzwerkdienste kontrollieren
• normalerweise muss fur jeden Dienst ein Damon laufen.z.B. httpd als Webserver, in.ftpd als ftp-Server
• inetd (Internet-Damon) kontrolliert, welches Programm (Damon)gestartet wird, wenn bestimmer Dienst angefordert wirdheute: xinetd hat den inetd abgelost
Konfiguration: /etc/xinet.d/
• xinetd ist mit libwrap (TCP-Wrapper) Support compiliert
Konfiguration uber die Dateien /etc/hosts.deny und /etc/hosts.allow
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Services konfigurieren (xinetd)
Start mit yast2 inetd
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
xinted Konfiguration
Datei /etc/xinetd.d/service (eine Datei pro Dienst)hier: telnet
# default: off# description: Telnet is the old login server which is INSECURE and should \
# therefore not be used. Use secure shell (openssh).# If you need telnetd not to "keep-alives" (e.g. if it runs over a ISDN \# uplink), add "-n". See ’man telnetd’ for more details.
service telnet{
socket_type = streamprotocol = tcpwait = no
user = rootserver = /usr/sbin/in.telnetd
disable = yes}
was fehlt noch ? – Zugriffskontrolle per Rechner
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
TCP-Wrapper Konfiguration
Datei /etc/hosts.deny (Zugriff verweigern)
# /etc/hosts.deny
# See ’man tcpd’ and ’man 5 hosts_access’ as well as /etc/hosts.allow# for a detailed description.
all: ALL
Datei /etc/hosts.allow (Zugriff auf die definierten Services)
# /etc/hosts.allow# See ’man tcpd’ and ’man 5 hosts_access’ for a detailed description
# of /etc/hosts.allow and /etc/hosts.deny.#
ALL: 127.0.0.1 127.0.0.2 \128.176.216.17 128.176.124.24 \
128.176.233.0/255.255.255.0
sshd: 134.194.20.10
in.ftpd: 64.20.10.2
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Andere Applikationen mit TCP-Wrapper Support
# package name | daemon path | token
# ----------------------------------------------------------------------------# ssh, openssh | /usr/sbin/sshd | sshd, sshd-fwd-x11, sshd-fwd-<port>
# quota | /usr/sbin/rpc.rquotad | rquotad# tftpd | /usr/sbin/in.tftpd | in.tftpd# portmap | /sbin/portmap | portmap
# The portmapper does not verify against hostnames# to prevent hangs. It only checks non-local addresses.
## (kernel nfs server)# nfs-utils | /usr/sbin/rpc.mountd | mountd
# nfs-utils | /sbin/rpc.statd | statd#
# (unfsd, userspace nfs server)# nfs-server | /usr/sbin/rpc.mountd | rpc.mountd
# nfs-server | /usr/sbin/rpc.ugidd | rpc.ugidd## (printing services)
# lprng | /usr/sbin/lpd | lpd# cups | /usr/sbin/cupsd | cupsd
# The cupsd server daemon reports to the cups# error logs, not to the syslog(3) facility.
## (Uniterrupted Power Supply Software)# apcupsd | /sbin/apcupsd | apcupsd
# apcupsd | /sbin/apcnisd | apcnisd#
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Runlevel konfigurieren
Start mit yast2 runlevel (Runlevel 3 und 5: mit Netzwerk)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Runlevel konfigurieren
Dienste nur im echten Bedarfsfall (Server) installieren, z.B.:
• apache2 (Webserver)
• cups (Printerqueues)
• mysql (Datenbank)
• nfsserver
• Postfix MTA (Mail)
• rsyncd (remote Backup/Replikation)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Apache Konfiguration
Datei /etc/apache2/httpd.conf (kein TCP-Wrapper support)
....
# forbid access to the entire filesystem by default<Directory />
Options None
AllowOverride NoneOrder deny,allow
Deny from allAllow from localhost
Allow from 128.176.216.147Allow from 128.176.0.0/255.255.0.0
</Directory>
...
Sicherheit von Linux-Systemen
Gegenmassnahmen
Konfiguration von Netzwerkdiensten
Konfiguration des SSH-Dienstes
Zahlreiche Konfigurationsoptionen mit Hilfe der Datei/etc/ssh/sshd config:
UsePAM yes: benutzt PAM- statt ssh-Einstellungen
PermitRootLogin no: root darf nicht !
PasswordAuthentication no: verhindert getunnelte Klartextpassworte
usw. usw.
Sicherheit von Linux-Systemen
Gegenmassnahmen
Uberwachung von aussen
Uberwachung der Ports von aussen
Portscanner testet die TCP/UDP-Ports eines Rechners
• testet die Verfugbarkeit der Dienste eines Rechners
• Sollte (darf !) man nur an den eigenen Rechnern einsetzen !
• ist im Prinzip ein Hacker-Tool ...
• gibt es in vielen Varianten, z.T. mit GUI (SAINT, ISS, Nessus)
• einfaches Kommandozeilen-Tool: nmap
Sicherheit von Linux-Systemen
Gegenmassnahmen
Uberwachung von aussen
nmap Beispiel
• Windows-Rechner:iltis:~ # nmap billgates
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-06-21 13:15 CEST
Interesting ports on BILLGATES.UNI-MUENSTER.DE (128.176.216.248):
(The 1660 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 00:0D:7D:4E:42:9A (Hewlett Packard)
Nmap finished: 1 IP address (1 host up) scanned in 0.544 seconds
• Linux-Rechner:iltis:~ # nmap thorwald
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2005-06-21 13:18 CEST \
Interesting ports on THORWALD.UNI-MUENSTER.DE (128.176.216.199):\
(The 1657 ports scanned but not shown below are in state: closed)\
PORT STATE SERVICE\
22/tcp open ssh\
37/tcp open time\
111/tcp open rpcbind\
631/tcp open ipp
3052/tcp open PowerChute
6000/tcp open X11
MAC Address: 00:1f:a6:f2:dc:a4 (Micro-star International CO.)
Nmap finished: 1 IP address (1 host up) scanned in 0.511 seconds
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
Konzept der Firewall
• Netz’komponente’, die IP-Pakete bewertet (Paketanalyse /Paketfilter)
• IP-Pakete oder Protokolle konnen blockiert werden
• Adressen konnen maskiert werden (NAT)
• Eine Firewall ist Bestandteil des Kernels (iptables Modul).
• SuSEFirewall ist ein Konfigurationstool dafur
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
Konfiguration von iptables
Kommandozeilenbefehl: iptables optionsAuszug aus einen FW-Skript:
...
for element in ${BANNED IP[@]}doiptables -A banned -p all -s $element -j DROP
donefor element in ${FULLACCESS IP[@]}
doiptables -A knownhosts -p tcp -s $element -j allowed
iptables -A knownhosts -p all -s $element -j ACCEPTdonefor element in ${INTERMEDIATE IP[@]}
doiptables -A knownhosts -p all -s $element -j intermediate
done...
→ etwas komplexe SyntaxAnleitung: http://iptables-tutorial.frozentux.netund Literatur (z.B. iptables kurz & gut, O’Reilly)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
SuSEFirewall
Start mit yast2 firewall(1) Zuordnung der Interfaces (external / internal / DMZ)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
SuSEFirewall
(2) Auswahl der erlaubten Dienste
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
Besseres Firewallinterface
• SuSEFirewall: geringe Granularitat (keine Def. von Netzen, Hosts)
• besser: Spezielle GUIs zur Konfiguration der Firewall (auch pf, PIX,ipfilter):
fwbuilder
http://www.fwbuilder.org
• Grafische Erstellung der Filterregeln
• Remote Administration verschiedener Firewalls (ssh)
• vordefinierte Dienste und IP-Ranges
• Gruppierung von Objekten (Hosts, Netze und Services)
Sicherheit von Linux-Systemen
Gegenmassnahmen
Firewall
DEMO fwbuilder und nmap
1 Erstellen einer Policy
2 nmap Demonstration: Schutz durch Firewall
Sicherheit von Linux-Systemen
Message
Take-Home-Message
1 Systempflege !Jeder Rechner muss Software-Updates erleben (oft vernachlassigt: Messrechner)
2 Systemanalyse”wissen, was lauft” - verdachtige Aktivitaten mussen erkannt werden
3 Nur Ressourcen vergugbar machen, die benotigt werdenjeder Dienst ist ein potentieller Angriffpunkt
4 Sichere Konfiguration der Dienste
• IP-Bereiche definieren (TCP-Wrapper)• Firewall moglichst zielgenau konfigurieren
5 Benutzer-PolicyNur authentifizierte Benutzer (moglichst Domanen-Accounts) zulassen