Sicherheit von Linux-Systemen - uni-muenster.de · Sicherheit von Linux-Systemen Sicherheit von...

46
Sicherheit von Linux-Systemen Sicherheit von Linux-Systemen Konfiguration von SuSE Linux Professional 9.3 Christian M¨ uck-Lichtenfeld Organisch-Chemisches Institut July 11, 2005

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

Part I

Bedrohungen

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

Part II

Gegenmassnahmen

Sicherheit von Linux-Systemen

Gegenmassnahmen

Sicherheitslucken kennen

[email protected]

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

Manueller Systemupdate

Installation

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

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

SuSEFirewall

(3) Auswahl der erlaubten Ports

Sicherheit von Linux-Systemen

Gegenmassnahmen

Firewall

SuSEFirewall

(4) Abschliessen und Anwenden

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

Part III

Message

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