UNIX Netzwerk-Tools

Prof. Jürgen Plate

4 Sicherheitsmassnahmen und -Tools

4.1 Sicherheitsmassnahmen

Mit zunehmender Abhägigkeit von Servern im Rechnernetz spielt die Verfügbarkeit dieser Systeme eine immer größere Rolle. Neben Verfahren der Fehlertoleranz zur Steigerung der Zuverlässigkeit spielen Verfahren der Rechnersicherheit eine wichtige Rolle, um die Verfügbarkeit von Rechnersystemen zu steigern. Weiterhin sind Rechner mit Anschluß an Netze, insbesondere an öffentliche Netze, zusätzlichen Anforderungen an die Sicherheit ausgesetzt, da sie von dort Angriffen ausgesetzt sein können. Der Zugang zum Netz und die Sicherheit im Netz sind sich durchaus manchmal widersprechende Anforderungen.

Eine ausführliche Beschreibung der wichtigsten Aspekte befinden sich im Skript Netzwerksicherheit. Deshalb werden an dieser Stelle nur einige Aspekte zusammengefasst, die sich auf UNIX/Linux-Server beziehen, administrative Ergänzungen gebracht und einige Standard-Tools beschrieben.

Das System härten

Das Härten eines Systems beginnt schon mit der Betriebssystem-Neuinstallation. Stellen Sie den Rechner in ein isoliertes Netzwerk. Zu keiner Zeit sollte man das ungeschützte System an ein aktives Netz oder gar das Internet anbinden und es so einer möglichen Kompromittierung aussetzen. Der erste Schritt ist die Auswahl der Installationspakete. Es wird nur das Minimum installiert, das man braucht um maximale Effizienz zu behalten. Je weniger Software installiert wird, desto weniger potentielle Sicherheitlücken entstehen. Unabhängig von der Installationsvariante sollte man die man-pages und die HOWTOs mitinstallieren. Während der Installation wird man aufgefordert, sein System zu partitionieren. Man braucht zumindest eine root-Partition und eine separate Partition für /var, wohin die Systemlogs und Mails geschrieben werden. Indem man /var isoliert, verhindert man, das die root-Partition vollgeschrieben wird. Eventuell sprendoert man für die Datenbereiche des Web- oder FTP-Servers eine weitere Partition. Wenn auf dem System nicht vertrauenswürdige Benutzer existieren, sollte man evtl. eine extra /home-Partition anlegen, damit diese Nutzer nicht die root-Partition vollschreiben können. Dazu kommt dann noch die swap-Partition. Normalerweise nimmt man hier die doppelte RAM-Kapazität.
Nachdem das System nach der Installation neu gestartet hat, sollte man unbedingt die empfohlenen Sicherheitspatches einspielen. Diese Patches sind extrem wichtig, um ein System zu härten und sollten immer auf dem aktuellen Stand gehalten werden. Ohne diese Updates ist das System leicht zu kompromittieren.

Dienste eliminieren

Nach der Installation aller Pakete und Patches und dem Neustart des Systems sind wir jetzt bereit das Betriebssystem zu härten. Härten besteht im wesentlichen darin, Dienste abzuschalten, Logging hinzuzufügen, verschiedene Dateien zu bearbeiten und TCP-Wrapper zu implementieren.

Linux ist ein mächtiges Betriebssystem, das viele nützliche Dienste anbietet. Die meisten davon werden aber nicht gebraucht und stellen ein potentielles Risiko. Der erste Ansatzpunkt ist die Datei /etc/inetd.conf. Diese Datei legt fest, auf welche Dienste der Daemon lauscht. Im Ursprungszustand ist der inetd für eine Vielzahl von Diensten konfiguriert. Es werden alle Zeilen auskommentiert, die nicht benötigte Dienste enthalten ("#" an den Zeilenanfang setzen). Zur Sicherheit können Sie sich alle noch aktiven Dienste mittels grep -v "^#" /etc/inetd.conf anzeigen lassen. Danach muß der inetd ein HUP-Signal bekommen. Da aber nach allen Arbeiten der Rechner sowieso nochmals gebootet wird, kann man sich das an dieser Stelle sparen.

Der nächste Ansatzpunkt sind die Start-Skripte. Diese Skripte bestimmen, welche Dienste durch den init-Prozess gestartet werden. Man findet sie je nach Distribution in /etc/init.d, /sbin/init.d oder /etc/rc.d. Hier werden alle nicht benötigten Start/Stop-Skripte durch Anhängen von ".inaktiv" umbenannt. Kritisch sind hier unter anderem:

telnetd    (Telnet abschalten, Logins nur per ssh erlauben)
portmap    (wird von rpc-Diensten wie NIS oder NFS benötigt)
netfs      (Der NFS-Client)
rstatd     (Man sollte versuchen, auf alle "r"-Dienste zu verzichten)
rusersd
rwhod
rwalld
bootparamd (Für diskless clients, abschalten)
yppasswdd  (Nur bei NIS-Servern, ein extrem verwundbarer Dienst)
ypserv
atd        (Wird vom "at"-Dienst benutzt)
snmpd      (SNMP daemon, kann detaillierte Informationen über das System geben)
named      (DNS server)
routed     (RIP: abschalten!)
lpd        (Druckdienste)
nfs        (Benötigt für den NFS Server, sonst abschalten)
amd        (AutoMount daemon)
gated      (für andere Routingprotokolle wie OSPF)
sendmail   (man kann dann immer noch E-Mails senden, nur keine empfangen oder weiterleiten)
ypbind     (nötig, wenn man ein NIS-Client ist)
xfs        (X font Server)
innd       (News Server)
linuxconf  (Fernkonfiguration per Browser. Der Traum jedes "bösen Buben")

Nach der Anpassung der Skripte (und einem Reboot), kann man sich mit dem Kommando ps -aux ansehen, wwelche Prozesse noch laufen. Außerdem sollte man feststellen, welche Dienste noch laufen: netstat -na --ip

Logging und Tuning

Alle Systemlogs liegen in /var/log. Standardmäßig hat Linux eine hervorragende Logfunktion, außer für ftp. Man hat zwei Möglichkeiten, ftp mitzuloggen: entweder man editiert die Datei /etc/ftpaccess oder die Datei /etc/inetd.conf. Letzteres ist einfacher. ändern Sie die Date wie folgt:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -L -i -o 
Die -l Option sorgt dafür, daß jede ftp-Sitzung im syslog protokolliert wird. Wird das -L flag gesetzt, werden bei Aufruf des ftp-Servers alle USER-Befehle mitprotokolliert. Die -i Option bewirkt, daß alle Dateien, die der FTP-Server empfängt, in der Datei xferlog mitprotokolliert werden und durch die Option -o werden alle Dateien, die der Server gesendet hat, in der Datei xferlog mitprotokolliert.

Der nächste Schritt besteht darin, die meisten Systemaccounts aus der Datei /etc/passwd zu entfernen. Linux stellt diese Accounts für verschiedene Systemdienste zur Verfügung, die eventuell nicht gebraucht werden. Je mehr Benutzer es gibt, um so einfacher ist es, Zugriff auf ein System zu bekommen. Ein Beispiel ist der User "news". Wenn kein Newsserver läuft, ist dieser Benutzer überflüssig

Jetzt wird die Datei /etc/ftpusers angepaßt. Jeder Benutzer, der in dieser Datei aufgeführt wird, darf sich nicht per FTP anmelden. Diese Anpassung verbietet es gängigen Systemaccounts wie root oder bin FTP-Sitzungen aufzubauen. Bei Linux existiert diese Datei standardmäßig. Stellen sie sicher, das root auf jeden Fall enthalten ist.

Die Datei /etc/securetty listet auf, mit welchen ttys sich root verbinden darf. Lassen sie nur die Konsol-ttys (tty1, tty2 usw.) in dieser Datei um Root-Logins auf lokale Terminals zu beschränken.

Kontollieren Sie alle cron-Aufträge (/etc/crontab, /etc/cron.d, die Crontab von root usw.), ob da nur das enthalten ist, was Sie wirklich wollen.

Verbindungen zum Server

Es ist wichtig, zur Administration oder den Upload von Dateien eine sichere Verbindung zum Server zu haben. Dafür bieten sich zwei Möglichkeiten, ssh und der TCP-Wrapper. ssh verschlüsselt jede Kommunikation zwischen Administrator und Server. Ein TCP-Wrapper wehrt zwar unerwünschte Verbindungen ab, schützt den Netzverkehr nicht gegen das Abhören. Hacker können immer noch jeden Tastendruck im Netz mitlesen. Ersetzen Sie telnet und ftp durch ssh und scp. ssh ähnelt TCP-Wrappern insofern, als es seine eigenen Protokollorierung besitzt und einschränken kann, welche Systeme sich mit dem Server verbinden können. Mehr Informationen über ssh sowie das Programm selber inklusive Sourcecode für Clients und den Serverdaemon findet man unter http://www.ssh.org/download.html. Eine andere Variante ist OpenSSH (http://www.openssh.com).

Wenn man sich ohne Vorbereitung versucht anzumelden wird man wie gewohnt nach einem Passwort gefragt. Vorher wird noch sichergestellt, ob man sich mit dem Rechner überhaupt verbinden will:

$ ssh tralala
The authenticity of host 'tralala (192.168.1.32)' can't be established.
RSA key fingerprint is 69:fd:32:d8:cf:d6:f3:8c:37:41:97:3f:54:25:90:0b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'tralala,192.168.1.32' (RSA) to the list of known hosts.
plate@tralala's password: geheim
... 

Ein TCP-Wrapper kann zwar nicht verschlüsseln, ist aber in der Lage zu protokollieren und zu kontrollieren wer Zugriff auf den Server hat. Es handelt sich hier um ein Programm, das sich zwischen den inetd und die Dienste wie telnet und ftp schaltet. Anhand der Dateien /etc/hosts.allow und /etc/hosts.deny wird die Zugriffsberechtigung überprüft. Wenn der Zugriff berechtigt erfolgt, übergibt der Wrapper die Verbindung an das entsprechende Programm. Ansonsten wird die Verbindung gekappt. Die Konfiguration wurde bereits in Kapitel 3.4 besprochen. Deshalb hier nur noch zwei Empfehlungen für den Einsatz von TCP-Wrappern:

  1. IP-Adressen statt System- oder Domänennamen verwenden
  2. In der Datei /etc/hosts.deny jeden Zugriff verbieten und dann selektiv in der Datei /etc/hosts.allow wieder freigeben.

Weitere Maßnahmen

Die oben beschriebenen Maßnahmen sind absolut notwendig. Die folgenden Aktionen verbessern die Sicherheit weiter.

4.2 Hackertools und Systeminfos

Das einzig wirklich gefährliche Hackertool sitzt zwischen den Ohren und vor dem Bildschirm.

Welche Tools liegen auf meiner Platte?

bash, perl Werkzeuge zur Steuerung von Komponenten für den Netzwerkzugriff, mit dem Ziel, aus vorgefertigten Bauteilen schnell massgeschneiderte Angriffstools zusammenstellen zu können.
ldaplibBibliothek zum Erstellen von Programmen zum Auslesen von fremden Passwortservern (Active Directory-Angriffe)
freeArbeitsspeicherverwendung
dfSpeicherplatz auf gemounteten Geräten
uptimeAnzeige der Systemlast und der Uptime
hostname, unameHost- und OS-Namen anzeigen
ifconfig, iwconfigInformationen über Netzwerkgeräte (als root) und WLAN anzeigen
topkurze Systeminformationen (Last, Speicher, etc) und Anzeige der Prozesse. htop macht das Ganze noch komfortabler.
ps, pstreeAnzeige der Prozesse (auch in Baumform)
netstatInformationen über Netzwerkverbindungen, Routingtabelle, etc.
dmesgAlle Systemstart-Informationen des Kernels (u.a. auch die Erkennung der Hardware)
iptrafViele Möglichkeiten zur Überwachung des IP-Verkehrs
wipeWerkzeug zur Datenlöschung, spezifisch mit dem Zweck spätere Rekonstruktion der gelöschten Daten zu erschweren.
mysqllibUnabdingbare Bibliothek zum Auslesen fremder Datenbankserver.
sash"System Administrator Shell", kleines Tool, mit dem ein Eindringling auch dann viele Sysadmin-Funktionen aufrufen kann, wenn der Eigentümer des Systems die notwendigen Administrationswerkzeuge eigentlich nicht installiert hat.
net_toolenthält mit "arp" ein Werkzeug zum Fälschen der Mac-Adressen von Systemen und damit zum Address-Spoofing.
rzsz, kermitWerkzeuge zum übertragen von binären Dateien über Datenkanäle, die eigentlich nur zur Übertragung von Text geeignet sind.
lsofWerkzeug zur Systemanalyse, kann verwendet werden, um versteckte Systemmonitore zur erkennen, Auditing zu unterlaufen.
bindutilAlle notwendigen Werkzeuge, um DNS-Anfragen zu simulieren, fremde DNS-Zonen auszuspionieren und ggf. auch einen Nameserver mit falschen Informationen zu füttern.
tcpdump, etherrealNetzwerksnooper, ideal geeignet, um in einem fremden Netz Passworte aufzuschnappen.
netcatDAS Tool zum Faken von Serverdiensten, zum Redirect von legitimen Servern auf illegale Dienste und zum Tricksen und Tarnen schlechthin. Zusammen mit nmap und tcpdump essentielle Bestandteile in jedem Hackerwerkzeugkasten.
nmapPortscanner zum Ausschnüffeln von offenen Serverdienste und zum Erstellen von Netzwerkplänen in Opfernetzwerken.
saint, nessusVulerability Scanner.
wgetWerkzeug zum Raubkopieren fremder Websites und geeignet, um DDOS-Angriffe auf fremde Websites zu treiben.
cracklibBibliothek zum Schreiben und Betreiben von Passwortcrackern.
gdb, ddd, stringsWerkzeuge zur Analyse fremder Binärprogramme.

Eine Liste der Top 75 Security Tools finden Sie bei http://www.insecure.org/tools.html.

Systeminfos

Unter /proc befinden sich beim klassischen Unix nur Informationen zu Prozessen. Bei Linux findet man jedoch noch einiges mehr. Die Informationen können ganz einfach z.B. per cat-Kommando auf der normalen Konsole angezeigt werde, da es sich um reine (Pseudo- Textdateien handelt.

/proc/cpuinfo Informationen zur CPU (u.a. Name, Taktfrequenz, Cache-Größe)
/proc/meminfo Informationen über den Arbeitsspeicher (u. a. Gesamtgröße, Cache, Swap)
/proc/partitions Informationen über Partitionen des Massenspeichers (u. a. Partitionsname, Anzahl der Blöcke)
/proc/modules Übersicht über die geladenen Module (u. a. Name, Speicheradresse)
/proc/devices Übersicht über vorhandene Char- und Block-Devices
/proc/version Informationen über die Kernelversion
/proc/loadavg aktuelle Systemauslastung
/proc/stat Prozesse
/proc/interrupts Übersicht über Interrupts
/proc/net/dev Statistik der Netzwerkgeräte (u.a. übertragene Bytes, Fehler)
/proc/bus Informationen und Übersichten über die Busse im Rechner.
/proc/bus/*/devicesÜbersichten über die jeweiligen Geräte des Bus
/proc/ide Hier finden sich die IDE-Geräte
/proc/ide/*/model Die Modellbezeichnung des Geräts
/proc/acpi/thermal-zone/THRG/temperatureCPU-Temperatur
/proc/acpi/battery/BAT?/stateBatteriezustand
/proc/acpi/ibm/fanLüfterstatus
/proc/<PID>/cmdlineKommandozeile des Prozesses mit der Nummer PID

4.3 tcpdump

tcpdump ist ein Sniffer, der alle Pakete im LAN mitlesen und auswerten kann. Das Programm ist in nahezu allen UNIX- und Linux-Distributionen enthalten. Es ist ein Standard-Tool, das auch schon viele Filterfunktionen implementiert hat. Eine ausführliche Beschreibung liefert die Manual-Seite. tcpdump erlaubt das Einlesen aller Netzwerk-Pakete (Promiscous Mode) und stellt diese oder nur ausgewählte Pakete auf dem Bildschirm dar. Aus Sicherheitsgründen ist tcpdump nur für root verfügbar. Kommandoaufruf:
tcpdump optionen filter-expression
Wesentliche Optionen kontrollieren die Art der Ausgabe:
-ddnur die "filter-expression" darstellen
-eEthernet-bezogen (statt IP-bezogen)
-s lenPaketlänge
-tkein Zeitstempel
-vmehr Information
-xHex-Dump der Paketdaten

Ohne filter-expression wird alles angezeigt. Eine filter-expression wird bezüglich eines Pakets interpretiert:

 tcpdump -dtxv host infosrv and udp port domain
(000) ldh      [12]
(001) jeq      #0x800           jt 2    jf 16
(002) ld       [26]
(003) jeq      #0x81bbce28      jt 6    jf 4
(004) ld       [30]
(005) jeq      #0x81bbce28      jt 6    jf 16
(006) ldb      [23]
(007) jeq      #0x11            jt 8    jf 16
(008) ldh      [20]
(009) jset     #0x1fff          jt 16   jf 10
(010) ldxb     4*([14]&0xf)
(011) ldh      [x + 14]
(012) jeq      #0x35            jt 15   jf 13
(013) ldh      [x + 16]
(014) jeq      #0x35            jt 15   jf 16
(015) ret      #65535
(016) ret      #0

filter-expression kann sich also auf die Felder der verschiedenen Header beziehen und diese logis und-, oder- bzw. nicht-verknüpfen und auch arithmetisch prüfen. Dies ist hinter einer Vielzahl von symbolischen Namen und relativ verwirrenden Abkürzungen versteckt:

term:  C-constant   Literal
   PROTOCOL [ offset : size ]   ether ip icmp arp rarp udp tcp
1, 2, oder 4 Bytes
   len  Paketlaenge
product:   term * term ...
   term / term ...
sum:   product + product ...
   product - product ...
bit-and:   sum & sum ...
bit-or:bit-and | bit-and ...
primitive: bit-or RELOP bit-or  < <= > >= != =

Bis hierher kann man mit einer C-ähnlichen Syntax Bytes in den Protokoll-Schichten bit-weise untersuchen. Mit Abkürzungen, die syntaktisch ebenfalls als primitive gelten, kann man die interessanten Felder symbolisch abfragen, zum Beispiel:

primitive: ether proto NAME   \ip \arp \rarp
   ip proto NAME  \icmp \tcp \udp
   ether src NAME Ethernet-Host
   ether dst NAME
   ether host NAME
   ether broadcast   Ethernet Broadcast
   src host NAME  IP-Host
   dst host NAME
   host NAME
   ip broadcast   IP Broadcast (0 oder 1)
   PROTOCOL dst port NUMMBER  \udp \tcp Port-Nummer
   PROTOCOL src port NUMMBER
   PROTOCOL port NUMMBER

Man kann vieles davon weglassen, denn Angaben werden auch von primitive zu primitive kopiert. Es gibt auch Tests für Pakete, die das lokale Netz verlassen.

primitive werden verknüpft, wobei fehlende Angaben zu Feldern immer als Wildcard interpretiert werden:

negation: not primitive
  primitive
  ( union )
intersection: negation and negation ...
union:intersection or intersection ...

Beispiele

palermo80:2a:fe:e2:ef:4110.10.10.200
ragusa80:2a:fe:11:15:da10.10.10.209
catania80:2a:fe:20:bb:2f10.10.10.205
messina80:2a:fe:26:17:7910.10.10.210

ARP: Beim Start von messina versucht catania, messina zu finden; messina antwortet selbst. Außerdem versucht messina, den (nicht-existenten) Router zu finden:

$ tcpdump -tev host messina and arp
tcpdump: listening on en0
80:2a:fe:20:bb:2f Broadcast arp 64: arp who-has messina tell 10.10.10.205
80:2a:fe:26:17:79 80:2a:fe:20:bb:2f arp 64: arp reply messina is-at 80:2a:fe:26:17:79
80:2a:fe:26:17:79 Broadcast arp 64: arp who-has 10.10.10.254 tell messina

Führt man auf messina ping palermo aus, muß messina palermo finden:

$ tcpdump -texv host messina and arp
tcpdump: listening on en0
80:2a:fe:26:17:79 Broadcast arp 64: arp who-has 10.10.10.200 tell messina
 0001 0800 0604 0001 0060 0826 1779 83ad
 0dd2 0000 0000 0000 83ad 0dc8 c8c8 c8c8
 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 44d4
 0d39
80:2a:fe:e2:ef:41 80:2a:fe:26:17:79 arp 68: arp reply 10.10.10.200 is-at 80:2a:fe:e2:ef:41
 0001 0800 0604 0002 000a 27e2 ef46 83ad
 0dc8 0060 0826 1779 83ad 0dd2 c8c8 c8c8
 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 c8c8 44d4
 0d39 3457 5e14

ping selbst findet in IP-Paketen statt (ist aber ICMP):

$ tcpdump -txv host messina and icmp
tcpdump: listening on en0
messina > 10.10.10.200: icmp: echo request (ttl 32, id 37376)
 4500 003c 9200 0000 2001 e5cc 83ad 0dd2
 83ad 0dc8 0800 415c 0300 0900 6162 6364
 6566 6768 696a 6b6c 6d6e 6f70 7172 7374
 7576 7761 6263
10.10.10.200 > messina: icmp: echo reply (ttl 255, id 14654)
 4500 003c 393e 0000 ff01 5f8e 83ad 0dc8
 83ad 0dd2 0000 495c 0300 0900 6162 6364
 6566 6768 696a 6b6c 6d6e 6f70 7172 7374
 7576 7761 6263

Auf ragusa kann man mit nslookup direkt DNS-Anfragen bearbeiten. Der DNS-Server muß erreichbar sein, sonst finden ARP-Anfragen zwecks Routing statt:

$ tcpdump -txv host ragusa and udp port domain
tcpdump: listening on en0
ragusa.1055 > messina.53: 15645+ A? foo. (21) (ttl 64, id 2536)
 4500 0031 09e8 0000 4011 4dd7 83ad 0dd1
 83ad 0dd2 041f 0035 001d 256f 3d1d 0100
 0001 0000 0000 0000 0366 6f6f 0000 0100
 01

Macht man das auf messina, muß man völlig anders filtern:

$ tcpdump -txv host messina and ip broadcast
tcpdump: listening on en0
messina.137 > 10.10.10.255.137: udp 50 (ttl 128, id 60160)
 4500 004e eb00 0000 8011 2c73 83ad 0dd2
 83ad 0dff 0089 0089 003a 8110 00c2 0110
 0001 0000 0000 0000 2045 4745 5045 5043
 4143 4143 4143

Hier wird UDP auf Port 137 verwendet (NETBIOS von Windows).

SYN- und FIN-Pakete beim TCP-Verbindungsauf- und -abbau kann man beobachten, indem man die relevanten Flags filtert und zum Beispiel einen TELNET-Anruf tätigt:

$ tcpdump -t 'host messina and tcp[13:1] & 3 != 0' &
tcpdump: listening on en0
$ telnet messina
ragusa.1143 > messina.telnet: S 3305751711:3305751711(0) win 32768
<mss 1460,nop,wscale 0,nop,nop,timestamp[|tcp]> (DF) [tos 0x10]
messina.telnet > ragusa.1143: S 3550809343:3550809343(0) ack 3305751712 win 32120
<mss 1460,nop,nop,timestamp 7325201[|tcp]> (DF)
messina.1032 > ragusa.auth: S 3548526334:3548526334(0) win 32120
 <mss 1460,sackOK,timestamp 7325203[|tcp]> (DF)
telnet> q
ragusa.1143 > messina.telnet: F 75:75(0) ack 122 win 33304
 <nop,nop,timestamp 124467 7325216> (DF) [tos 0x10]
messina.telnet > ragusa.1143: F 122:122(0) ack 76 win 32120
<nop,nop,timestamp 7329858 124467> (DF)

Man sieht, daß eine Reihe von Optionen übermittelt werden und daß der TELNET-Server ohne Erfolg versucht, eine Verbindung zurück zu einem Authentication-Server aufzubauen, der ihm die Benutzer-Identität mitteilen soll.

Das abschließende ACK des Drei-Wege-Handshake wird durch die Filterung unterdrückt.

Beispiel 2: In diesem Beispiel belauscht tcpdump an ippp0 eine traceroute-Session. Der Parameter -q ist bei traceroute auf 1 gesetzt, damit pro Hop nur eine UDP-Probe gesendet wird, zudem ist der Parameter -m, time to live, auf 5 gesetzt, sodass nur max 5 Hops abgefragt werden. Die lokale IP-Adresse bei dieser Session ist 217.0.16.33. Die Remote-IP-Adresse ist 212.185.255.125. Die Adresse des Name-Servers ist 194.25.2.129. traceroute und tcpdump laufen in 2 unterschiedlichen Textkonsolen. traceroute wurde auf einen Hostnamen und nicht auf eine IP-Adresse ausgeführt, von daher enthält der Dump ausser den traceroute Anfragen und Antworten auch noch Anfragen auf einen Nameserver und dessen Antworten.

Konsole 1: traceroute

# traceroute -q 1 -m 5 www.example.com
traceroute to www.example.com (192.0.34.166), 5 hops max, 40 byte packets
 1  212.185.255.125 (212.185.255.125)  22 ms
 2  62.225.244.61 (62.225.244.61)  20 ms
 3  WAS-E4.WAS.US.NET.DTAG.DE (62.154.14.134)  126 ms
 4  p16-1-0-3.r20.asbnva01.us.bb.verio.net (129.250.9.141)  118 ms
 5  p64-0-0-0.r21.asbnva01.us.bb.verio.net (129.250.2.35)  132 ms

Konsole 2: tcpdump. tcpdump diesmal mit Parameter -t ausgeführt, damit der Zeitstempel nicht mit ausgegeben wird. Die Zeilennummern am Zeilenanfang wurden nachträglich eingegeben, damit sich die Erklärungen darauf beziehen können.

# tcpdump -t -i eth0
tcpdump: listening on eth0
01 217.0.16.33.1024 > 194.25.2.129.domain:  26428+ A? www.example.com. (33) (DF)
02 194.25.2.129.domain > 217.0.16.33.1024:  26428 1/0/0 A 192.0.34.166 (49) (DF)
03 217.0.16.33.34345 > 192.0.34.166.33435:  udp 12 [ttl 1]
04 212.185.255.125 > 217.0.16.33: icmp: time exceeded in-transit
05 217.0.16.33.1024 > 194.25.2.129.domain:  26429+ PTR? 125.255.185.212.in-addr.arpa. (46) (DF)
06 194.25.2.129.domain > 217.0.16.33.1024:  26429 NXDomain 0/1/0 (119) (DF)
07 217.0.16.33.34345 > 192.0.34.166.33436:  udp 12
08 62.225.244.61 > 217.0.16.33: icmp: time exceeded in-transit [tos 0xc0]
09 217.0.16.33.1024 > 194.25.2.129.domain:  26430+ PTR? 61.244.225.62.in-addr.arpa. (44) (DF)
10 194.25.2.129.domain > 217.0.16.33.1024:  26430 NXDomain 0/1/0 (117) (DF)
11 217.0.16.33.34345 > 192.0.34.166.33437:  udp 12
12 62.154.14.134 > 217.0.16.33: icmp: time exceeded in-transit
13 217.0.16.33.1024 > 194.25.2.129.domain:  26431+ PTR? 134.14.154.62.in-addr.arpa. (44) (DF)
14 194.25.2.129.domain > 217.0.16.33.1024:  26431 1/0/0 (83) (DF)
15 217.0.16.33.34345 > 192.0.34.166.33438:  udp 12
16 129.250.9.141 > 217.0.16.33: icmp: time exceeded in-transit
17 217.0.16.33.1024 > 194.25.2.129.domain:  26432+ PTR? 141.9.250.129.in-addr.arpa. (44) (DF)
18 194.25.2.129.domain > 217.0.16.33.1024:  26432 1/0/0 (96) (DF)
19 217.0.16.33.34345 > 192.0.34.166.33439:  udp 12
20 129.250.2.35 > 217.0.16.33: icmp: time exceeded in-transit (DF)
21 217.0.16.33.1024 > 194.25.2.129.domain:  26433+ PTR? 35.2.250.129.in-addr.arpa. (43) (DF)
22 194.25.2.129.domain > 217.0.16.33.1024:  26433 1/0/0 (95) (DF)

22 packets received by filter
0 packets dropped by kernel
Zeile 01:Eine Nameserver-Anfrage.
Zeile 02:Die Auflösung des Namens in eine IP-Adresse.
Zeile 03:Das erste von traceroute abgeschickte UDP-Packet mit dem Quellport 34345 und dem Zielport 33435.
Zeile 04:Die erste ICMP Time Exceeded Nachricht für den ersten Hop.
Zeile 05:Die nächste Nameserver-Anfrage. Allerdings diesmal ein Reverse-Lookup.
Zeile 06:Die Auflösung der IP-Adresse in einen Namen.
Zeile 07:Das zweite von traceroute abgeschickte UDP-Packet mit dem Quellport wieder 34345, Zielport jedoch 33436.
Zeile 08:Die ICMP Time Exceeded Nachricht für den zweiten Hop.
Und so weiter - jetzt wiederholt sich das Ganze mit der Erhöhung des Zielports.

ethereal

Ethereal ist ein Freewaresniffer mit grafischer Oberfläche, der alle Pakete im LAN mitlesen und auswerten kann. Die abgehörten Pakete werden übersichtlich dargestellt, definierte Filter sortieren die gewünschten Pakete. Ethereal analysiert alle Pakete des ISO/OSI-Layers vom Ethernetframe bis zur telnet-Session. Zu finden unter www.ethereal.com.

John the Ripper

John the Ripper ist ein moderneres Password-Crack-Programm, das auch per DES (Data Encryption Standard) verschlüsselte Passwörter entschlüsseln kann. (Linux- und Unix-Passwörter werden standardmäßig per DES verschlüsselt).

Im Single Mode versucht John, die in der Password-Datei gespeicherten GECOS-Informationen (General Electric Comprehensive Operating System), also die persönlichen Daten zu jedem User wie z.B. Name, Telefonnummer ect, als Passwort einzusetzen. John braucht eine Passwort-Datei (/etc/passwd) im alten Stil, d.h. mit gespeichertem Passwort. Heute wird jedoch in der Regel das Passwort in der Datei /etc/shadow gespeichert. In diesem Fall hilft das Programm "unshadow", das die beiden Dateienm zusammenführt. Dieser Mode ist natürlich nur dann effektiv, wenn die User auch ihre persönlichen Informationen als Passwort verwenden. Allerdings ist dieser Mode auch sehr schnell, weshalb man ihn nicht unterschätzen sollte. Die Effektivität dieses Modes steigt mit der Anzahl der in der Password-Datei enthalten User, da er die GECOS-Informationen jedes Users bei allen anderen Usern auch als mögliches Passwort überprüft.

Der zweite Modus ist der Wordlist Mode. Die Effizienz dieses Modes hängt von der Größe und vor allem von der Qualität der verwendeten Wortliste ab. So kann man server- bzw. adminspeziefische Wordlists erstellen und damit die Erfolgswahrscheinlichkeit erhöhen, da man sämtliche zur Verfügung stehenden Informationen benutzen kann; und genau darin liegt die Stärke dieses Modes. In der Wordlist-Dateisteht in jeder Zeile nur eine Zeichenfolge. Auch sollte darauf geachted werden, dass die Wordlist beispielsweise alphabetisch sortiert ist, da John ein wenig schneller arbeitet wenn aufeinaderfolgende Wörter oder Zeichenfolgen sich nicht allzu stark voneinander unterscheiden.

Der Incremental Mode ist Johns mächtigster Modus. Er kann jedes existierende Password, unabhängig davon ob es aus Buchstaben, Sonderzeichen, Zahlen oder Kombinationen besteht, decrypten indem er sämtliche möglichen Kombinationen überprüft. Diese Methode wird auch Brute-Force genannt. Hierbei ist allerdings zu beachten, dass die zum decrypten benötigte Zeitspanne (abhängig von Prozessorleistung, Passwortlänge und der im Passwort verwendeten Zeichen) sehr groß sein kann.

Der External Mode ist eher für die erfahrenen Benutzer ausgelegt, da er vollständig konfiguriert werden muss. Durch das definieren der Parameter hinter [LIST.EXTERNAL:MODE] in der john.ini Datei, wird ein komplett neuer, individueller Mode erstellt. Dadurch wird es vor allem den Benutzern, die mit John schon Erfahrungen gemacht haben, ermöglicht einen Mode ihren persönlichen Bedürfnissen anzupassen.

Die wichtigsten Befehle von John sind:

john -single dieser Befehl started John im Single-Mode
john -i dieser Befehl started John im Incremental-Mode
john -w:namederwordlist dieser Befehl started John im Wordlist-Mode
john -e:MODE dieser Befehl started John im External-Mode unter Verwendung der bei LIST.EXTERNAL: definierten MODE Eigenschaften
john dieser Befehl lässt John zuerst den Single- dann den Wordlist und schließlich noch den Incremental-Mode durchlaufen
john -show dieser Befehl zeigt die decrypteten Passwörter an

Hinter jedem dieser Befehle muss noch die Passwort-Datei angegeben werden. Ohne Parameterangabe listed John alle verfügbaren Parameter auf.

Die neusten Versionen von John the Ripper findet man unter www.openwall.com/john/.

4.5 Nmap

Nmap ist ein äusserst mächtiger Portscanner unter Linux und Windows. Er wurde entwickelt, um Systemadministratoren eine Möglichkeit zu bieten, Netzwerke zu analysieren, festzustellen, welche Hosts aktiv sind und welche Dienste sie anbieten. Portscanner prüfen IP-Komponenten auf geöffnete oder geschlossene TCP/UDP-Ports. Mit Hilfe von unterschiedlichen Analysen können Rückschlüsse auf das untersuchte Betriebsystem und die eingestellten Paketfilterregeln gezogen werden. Die FIN-Analyse verschickt TCP-Pakete an die Zieladresse, um zu testen, ob ein Port aktiv ist, aber nicht auf einen Verbindungsaufbau (angezeigt durch ein SYN-Paket) reagiert. Ein Stealth-Scan führt keinen kompletten Verbindungsaufbau durch, so dass die Kommunikation nicht in Logdateien vermerkt wird. Pingscans überprüfen die Aktivität in Netzen und geben dem User einen überblick über die Anzahl der eingesetzten Hosts.
Nmap unterstützt viele Abtastverfahren: Zudem kann Nmap Remote-OS-Abfragen über einen TCP/IP Fingerabdruck, Stealth-Scans, dynamische Verzögerung und Übertragungsberechnungen, Parallel-Scans, Abfragen von inaktiven Hosts über parallele Pings, Portfilter-Identifikation, RPC-Scans, Scans auf fragmentierte Pakets sowie Ziel- und Port-Scans durchführen. Das Resultat der Scans ist immer eine Auflistung von interessanten Ports, die für Einbrüche benutzt werden können. Nmap gibt dabei stets die Portzahl und den Namen des Services an. Der Zustand des Ports wird mit "geöffnet", "gefiltert" oder "ungefiltert" angegeben. "Offen" heißt dabei, der Port kann beliebig angesprochen werden. "Gefiltert" heißt, ein Firewall verhindert den Zugriff auf den angepeilten Port. "Ungefiltert" heißt, ein Firewall ist am Ziel-Host zwar installiert, blockiert aber den Zugriff auf den angepeilten Port nicht. Abhängig von den verwendeten Parametern können das benutzte Betriebssystem, die TCP-Sequenz, angemeldete Benutzer, der DNS-Namen und einige andere Informationen ermittelt werden.

Der kostenlose Port-Scanner unterstützt beispielsweise:

Beispiel für einen nmap-Scan:
nmap -sS -O -p 1-65535 IP -oN Ausgabe.on -oM Ausgabe.om

Bezugsquelle:

Die Installation erfolgt nach Standard-Schema:

gzip -cd nmap-VERSION.tgz | tar xvf -
cd nmap-VERSION
./configure
make
su root
make install
Für Linux gibt es passende RPM-Archive.

Nmap wird über zahlreichen Kommandozeilenparameter gesteuert. Sind angebene Kombinationen nicht sinnvoll, gibt Nmap eine entsprechende Warnmeldung aus und informiert den Nutzer darüber. Wenn Sie sich nicht sicher sind, können Sie sich die einzelnen Parameter auch anzeigen lassen. Dies geschieht über die Eingabe von: nmap -h.

Scan-Arten

Allgemeine Optionen

Timing-Einstellungen

Nmap ist an sich schon ein Werkzeug, mit dem Scans weitestgehend unentdeckt bleiben. In einigen Fällen kann mit zusätzlichen Optionen das Timing noch feiner abgestimmt werden. -T (Paranoid, Sneaky, Polite, Normal, Aggressive, Insane)
Mit den -T Optionen lässt sich das Timing der Scans passgenau auf das Zielsystem einstellen.
Der Paranoid-Modus verlangsamt den Scan sehr, um eine Entdeckung mittels Intrusion-Detection-System zu vermeiden. Er serialisiert alle Scand und wartet allgemein 5 Minuten bis zur Sendung des Folgepaketes.
Der Sneaky-Modus ist mit dem Paranoid-Modus vergleichbar, nur sendet er die Pakete im Abstand von 15 Sekunden.
Der Polite-Modus erleichtert die Netzlast und verkleinert die Gefahr des Crashs der Zielmaschine. Er serialisiert die zu senden Paktes ebenfalls und wartet ca. 0.4 Sekunden bis zum Folgepaket.
Der Normal-Modus scannt so schnell, wie es möglich ist, ohne das Netz zu überlasten. Der Aggressive-Modus setzt einen 5-Minuten-Timeout pro Maschine, wartet aber nie länger als 1,25 Sekunden auf eine Antwort.
Insane ist eigentlich nur für sehr schnelle Netze verwendbar oder wo akzeptiert werden kann, wenn einzelne Informationen dabei verloren gehen. Der Insane-Modus wartet nur 0.3 Sekunden bis zum nächsten Paket.

nessus - Security Scanner

Nessus gehört zur Gruppe der Securityscanner. Nessus ist Freeware und arbeitet auf der Basis einer regelmäßig aktualisierten Datenbank, die die neuesten Schwachstellen enthält. ähnlich wie bei nmap gibt man die gewünschten IP-Adressen oder -bereiche an, und erhält kurze Zeit später eine Analyse über geöffnete Ports, Softwareversionen dieser und eine nach Dringlichkeit sortierte Liste aller Schwachstellen, welche über Links zu näheren Informationen des Certs verbunden sind. über Plugins sind eine Reihe von weiteren Tests wie Denial of Service-Tests u.ä. möglich.

Bezugsquelle: http://www.nessus.org/download.html

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum ersten Abschnitt


Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: