|
|

Einleitung
Im vorherigen Beitrag haben wir ein sicheres Linux Gateway mit Router und Firewall Funktion erstellt. (Falls du den vorherigen Artikel: Router / Firewall selbst Bauen nicht gelesen hast, solltest du dies jetzt tun, da dieser Artikel auf dem vorherigen basiert.) Jetzt kommt die Feinarbeit, das umwandeln unseres Gateways in eine Festung.
Das erste was man jetzt aber verstehen muss ist, es gibt keinen Weg um komplett sicher zu sein. Es ist einfach nicht genügend Zeit vorhanden um alles zu tun; Grosse Firmen stellen riesige Informatik Abteilungen an, deren einziges Lebensziel darin besteht ihre Netzwerke abzusichern und werden immer noch geknackt.
Unser richtiges Ziel hier ist es die freundlichen Leute freundlich zu behalten, die Script Kiddies und Würmer draussen zu halten und den Rest zu verlangsamen um dir die Möglichkeit zu geben diese zu Entdecken bevor sie in deinem Netzwerk Schaden anrichten können.
Idealerweise fängt diese Sicherheit schon nach einer sauberen Installation an, bevor das System je ans Internet angeschlossen wird.
System Updates und Sicherheitsratschläge
In der Welt der IT-Sicherheit ist Wissen Macht. Sicherheitsexperten sind immer einen Schritt hinter den Crackern, viele Sicherheitslücken werden nicht von den Sicherheits- Experten, aber von den Crackern entdeckt.
Du musst dich über neue Probleme immer auf dem neuesten Stand halten und solltest vor allem die Programme updaten, sobald eine neue Version rauskommt.
Tippe regelmässig apt-get update && apt-get upgrade -s auf deinem Gateway ein; dies zeigt dir eine Liste aller installierten Pakete für die es eine neue Version gibt. Spiele nach Möglichkeit die neuen Versionen immer ein mittels: apt-get install PAKETNAME
Falls du wirklich aktiv sein willst, solltest du zu http://www.securityfocus.com gehen und dich sowohl zur BugTraq wie auch zur CERT Mailingliste anmelden.
Physische Sicherheit
Für Heimanwender stellt die Physische Sicherheit kein Problem dar, in einer Firma sollte man das Gateway auch physisch absichern, damit niemand ungewollt Sachen installieren-, den Netzstecker ziehen kann, usw.
Folgende Ratschläge sind hierbei -je nach Bedarf- hilfreich:
- Alle Laufwerke, wie CD-ROM, Diskette, usw. entfernen
- Alle nicht benötigten Anschlüsse wie z.B. USB, Serielle Schnittstelle, usw. deaktivieren oder entfernen
- Den Gateway Computer in einem Schrank oder Tresor einschliessen
- Die Steckdose so versiegeln, dass sie von aussen nicht mehr erreicht werden kann
- Ein Notstrom-Gerät an das Gateway anschliessen; dieses sollte zusammen mit dem Gateway im verschlossenen Schrank stehen
Wie gesagt, obige Ratschläge sind für viele Leute nicht erforderlich; ich würde dennoch mindestens die Laufwerke aus dem Gateway Computer entfernen, sobald er stabil läuft.
Benutzer Accounts und Passworte
Neben dem root Account und den spezial Accounts, welche später behandelt werden, sollte es nur einen User Account geben. Der root und User Account sollten gute Passworte haben. Ein gutes Passwort ist mindestens 8 Zeichen lang, besteht aus einem mix aus gross- und Kleinbuchstaben, Nummern, Sonderzeichen und ist kein Wort das in einem Wörterbuch vorkommt. Es ist ebenfalls eine gute Idee die Passworte von Zeit zu Zeit zu ändern und schreib sie nicht auf einen auf den Monitor geklebten Zettel, wo jeder es lesen kann. Benutze verschiedene Passworte für jeden Computer im Netzwerk, denn so wenn ein System geknackt wurde, wird ein Angreifer immer noch nicht Zugang zu den anderen Systemen im Netzwerk haben. Nochmals, weil Passwörter knacken Zeit braucht, wirst du ihn hoffentlich entdecken bevor er zu weit kommt.
Nun zurück zu den User Accounts. Während der Installation werden viele verschiedene spezielle User Accounts von den meisten Distributionen erstellt. Für unserer Verwendungszweck sind diese unnötig und stellen ein Sicherheitsrisiko dar, also werden wir diese mit dem userdel Befehl entfernen. Die Syntax für diesen Befehl lautet: userdel USERNAME , darin steht username für den entsprechenden user Account Namen. Die Accounts, die wir entfernen wollen sind: adm, lp, sync, shutdown, halt, news, uucp, operator, games, gopher und ftp. Wir wollen auch die dazugehörigen Gruppen mit dem Befehl groupdel löschen; die Syntax ist die selbe wie vorhin. Gruppen zum entfernen sind: adm, lp, news, uucp, games, dip, pppusers, popusers und slipusers.
Hinweis: Man sollte ausserdem alle user löschen, die keine Datei besitzen.
Diese findet man mit: find / -user $USERNAME -ls &
Alle Benutzer kann man sich mit: cat /etc/passwd anzeigen lassen.
Mittels folgendem Code kann man sich alle Benutzer anzeigen lassen, denen Dateien gehören und die man im System lassen sollte:
clear && cat /etc/passwd && cut -f 1 -d : /etc/passwd | while read i; do find / -group "$i" | grep -q . && echo "$i"; done
Falls dennoch etwas schief gegangen ist: Unter Debian kann man mit: update-passwd den Original-Zustand der Systemuser wiederherstellen.
Unnötige Programme
Ein Grossteil der Computersicherheit basiert darauf sowenig wie möglich installiert zu haben; denn jedes zusätzliche Programm ist ein Angriffspunkt mehr.
Auch bei einer minimalinstallation werden noch unnötige Programme installiert, die es zu entfernen gilt:
apt-get --purge remove ipchains discover1-data eject hotplug tasksel usbutils
Wer über ein Kabelmodem, d.h. nicht DSL online geht kann zusätzlich noch das Paket ppp entfernen:
apt-get --purge remove ppp
Konfigurationsdateien
Dies ist zweifellos der wichtigste Abschnitt. Schlecht verwaltete Konfigurationsdateien sind das grösste Sicherheitsrisiko für jedes System. In diesem Abschnitt wirst du viele gleiche Befehle immer wieder eingeben müssen, also ist dies eine gute Gelegenheit dazu ein Shell-Script zu erstellen, dass diese Schritte automatisiert.
Was wir hier tun wollen nachdem wir mit jeder Datei fertig sind ist zuerst sicherzustellen, dass diese nur root gehört, zweitens dass nur root darin lesen und schreiben kann und drittens, dass es nicht mal von root mehr verändert werden kann.
Dies schützt die Dateien um versehentlich gelöscht oder verändert zu werden und verhindert auch, dass diese gelinkt werden, was ebenfalls ein Sicherheitsrisiko darstellen könnte.
Tippe dazu touch secure-it ein, danach tippe: chmod +x secure-it ein und öffne die Datei dann mittels vi secure-it
In diese Datei fügst du fiolgende Zeilen ein:
#!/bin/sh
# Change owner to root
chown root.root $1
# Change permissions so only root has access
chmod 600 $1
# Make the file unalterable
chattr +i $1
Wenn du fertig bist, speichere die Datei und kopiere sie in das /usr/sbin/ Verzeichnis mittels: cp secure-it /usr/sbin Nun können wir eine Datei ganz einfach mittels Eingabe von: secure-it dateiname abschliessen.
/etc/inetd.conf
Von hier aus starten viele TCP/IP Services. Da der einzige Service, den wir laufen lassen wollen sshd ist, der nicht von inetd gestartet wird, sollte diese Datei ebenfalls leer sein, falls nicht, lösche sie mit rm /etc/inetd.conf, erstelle eine neue mit touch /etc/inetd.conf und schliesse sie mit secure-it /etc/inetd.conf.
/etc/hosts.deny
Dies sagt dem System, welchen Hosts es verboten ist auf die TCP/IP Services zuzugreifen.
Diese Datei kann leer sein, da wir schon Firewall-mässig die Ports zumachen.
Man kann darin aber auch
ALL: ALL
schreiben. Dies verbeitet allen Hosts, die nicht in /etc/hosts.allow stehen auf das System zuzugreifen.
Achtung: Auf manchen Systemen kann man dann aber auch nicht mehr per SSH auf das Gateway zugreifen!
Danach wollen wir die Datei abschliessen.
/etc/hosts.allow
Diese Datei sagt dem System welchen anderen Systemen es evtl. erlaubt ist auf die gestarteten Services zuzugreifen; Da /etc/hosts.deny aber leer ist, sollte diese Datei so ebenfalls leer sein; falls man oben ALL: ALL eingefügt hat, kann man hier seine IP eintragen um von dieser doch noch zugreifen zu können.
Entferne sie mit rm /etc/hosts.allow, erstelle eine neue mit touch /etc/host.allow und schliesse sie ab mit secure-it /etc/hosts.allow.
/etc/host.conf
Da wir eine Verteidigung gegen Attacken von aussen aufbauen, sollten wir hier als letzte Zeile in /etc/hosts.conf schreiben:
nospoof on
Syncookies schützen das System vor SYN-Flood attacken, verletzten aber die RFC
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Andere Dateien, die nicht geändert, aber abgeschlossen werden müssen sind: /etc/services, /etc/passwd, /etc/shadow, /etc/group and /etc/gshadow.
Hinweis: /etc/passwd und /etc/group müssen für alle lesbar sein! -Aus diesem Grund, sollten diese zwei Dateien nicht mit secure-it abgeschlossen werden, sondern mit:
chattr +i /etc/passwd /etc/group
Falls du nun planst dein Passwort zu ändern, oder ein Benutzer hinzuzufügen musst du chattr -i [dateiname] auf die folgenden Dateien anwenden: /etc/passwd, /etc/shadow, /etc/group und /etc/gshadow oder du wirst eine Fehlermeldung erhalten.
/etc/fstab
Von hier bekommt das System Informationen darüber, welche Laufwerke und Partitionen beim aufstarten gemountet werden müssen und wo. Falls du dein System als eine grosse Partition partitioniert hast, oder du keine separate Partition für /home und /tmp erstellst hast, kannst du diesen Abschnitt überspringen. /home und /tmp sind wichtige Bereiche, weil sie von anderen Benutzern als root gelesen und geschrieben werden können. Was wir nun wollen ist limitieren was der Benutzer auf diesen Partitionen machen darf. In /home wollen wir nicht, dass ein Benutzer ein SUID-Programm oder ein Laufwerk erstellt und zusätzlich in /tmp wollen wir dass keine Programme ausgeführt werden können. Dies erreichen wir, indem wir die Datei /ec/fstab ändern.
Deine Datei sollte etwa so aussehen:
/dev/hda1 / ext3 defaults 1 1
/dev/hda9 /boot ext3 defaults 1 2
/dev/hda5 /home ext3 defaults 1 2
/dev/hda6 /tmp ext3 defaults 1 2
/dev/sda1 /usr ext3 defaults 1 2
/dev/hda7 /var ext3 defaults 1 2
/dev/hda8 swap swap defaults 0 0
none /proc proc defaults 0 0
Wir wollen die /home und /tmp, /usr und /var Zeile so ändern, dass sie wie folgt aussieht:
/dev/hda3 /home ext3 ro,nosuid,nodev,noexec 0 2
/dev/hda5 /tmp ext3 defaults,nodev,nosuid,noexec 0 2
/dev/hda6 /usr ext3 defaults,ro,nodev 0 2
/dev/hda7 /var ext3 defaults,nodev,nosuid,noexec 0 2
Achtung: Das ändern der /var Zeile sollte man nur machen, wenn man kein Programm darauf hat, wie z.B. einen DNS Server!
SUID Programme
Nun müssen wir alle SUID Programme finden; dies sind Programme, die die Identität von root annehmen, wenn sie ausgeführt werden, was ein hohes Sicherheitsrisiko darstellt. Dies macht diese Programme Ziele von Buffer Overflow Attacken und Vertauschungen mit Trojanern. Um alle SUID Programme auf dem System zu finden tippe: ls -alF `find / -perm -4000` ein; die Ausgabe wird etwa so aussehen:
-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage
-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd
-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall
-rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at
-rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man
-r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate
-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn
-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh
-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp
-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write
-rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab
-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl
-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute
-rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter
-rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su
-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount
-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount
-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping
-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport
-r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd
Wie du sehen kannst, zeigt die linke Seite die Berechtigung an; jedes Programm mit einem "s" darin hat das SUID bit gesetzt, beim deaktivieren des SUID bits kann nur noch root das Programm ausführen. Was nun gemacht werden muss, ist rauszufinden bei welchen Programmen das SUID bit sicher abgeschaltet werden kann - viele von diesen Programmen brauchen es allerdings um normal ablaufen zu können; andere wiederum sollten sowieso nur von root ausgeführt werden. Das SUID bit schaltest du mit dem Befehl chmod a-s dateiname ab.
Empfohlen für diesen Schritt werden:
/usr/bin/chage,
/usr/bin/gpasswd,
/usr/bin/wall,
/usr/bin/chfn,
/usr/bin/chsh,
/usr/bin/newgrp,
/usr/bin/write,
/usr/sbin/usernetctl,
/usr/sbin/traceroute,
/bin/mount,
/bin/umount,
/bin/ping,
/sbin/netreport
.
System Integrität überprüfen
Das letzte, was wir nun noch tun wollen ist das System so aufzusetzen, damit es in der Lage ist dich zu warnen, falls irgendwas verändert wurde. Sobald irgendein Einbrecher reinkommt und ein Trojaner pflanzt, oder ein Account erstellt, wollen wir dass das System uns sagen kann was verändert wurde.
rkhunter
rkhunter durchsucht das System regelmässig nach Rootkits und Trojanern und sendet eine Meldung per Mail, wenn etwas nicht stimmt.
AIDE
AIDE erstellt einen kompletten Snapshot vom System und informiert, sobald Dateien geändert wurden.
logwatch
Logwatch ist ein nettes Tool, dass die täglich die Auswertungen der wichtigsten logfiles zusendet.
Abschluss
Es ist nun relativ sicher das System ins Internet zu stellen. Sobald dies getan ist, willst du wahrscheinlich deine Sicherheit überprüfen. Unter: http://www.security-check.ch kannst du dein System auf offene Ports überprüfen lassen und siehst, wie sicher du nun durchs Internet surfst.
Hinzugefügt am: 11.05.2004
Geändert am: 24.08.2006
Related Links
Related Downloads
User Anmerkungen
0 User Anmerkungen zu dieser Seite [Anmerkung hinzufügen]
|
| Noch keine Notitzen zu dieser Seite vorhanden. Möchtest du eine Notiz hinzufügen? |
0 Beiträge zu dieser Seite im Forum [Zum Forum]
|
|