2 Typische Angriffe

Werbung
2 Typische Angriffe
 Trojanisches Pferd
 Virus
 Wurm
 Umgehung von Sicherheitsmechanismen
 Ausnutzung von Software-Verletzlichkeiten
. . . weitere, insbesondere im Netz
SS-2
1
2.1 Trojanisches Pferd
Schadsoftware, die neben nützlicher Funktionalität
auch nicht dokumentierte, schädliche Funktionen enthält und
diese unabhängig vom Anwender und ohne dessen Wissen ausführt.
Beispiele:  Programm verhält sich wie normaler Editor,
leitet aber heimlich die eingegebenen Daten
auch an den Angreifer weiter.
 Java-Bibliotheksklasse befragt bei jeder Benutzung
eine geheime Webseite des Angreifers, ob eine
Sabotage-Maßnahme durchgeführt werden soll.
 Ferngesteuertes Programm !
SS-2
2
Schutzmaßnahmen:
 Zugriffsrechte restriktiv handhaben ( 4)
(bringt nicht viel)
 Capability-basierter Schutz ( 4)
 Sichere Programmübernahme aus vertrauenswürdiger Quelle
 Programme signieren ( 8)
(sofern man dem Unterzeichner vertraut)
 Informationsflusskontrolle ( 5)
 Code Reviews
Alles nicht einfach!
 Trojanische Pferde gehören zu den großen Herausforderungen
in der IT-Sicherheit !
SS-2
3
2.2 Virus
 Code, der vom Angreifer in zunächst korrekte Programme eingebaut wird,
 bei jedem Start eines so infizierten Wirtsprogramms mitausgeführt wird,
 dabei weitere Programme in der gleichen Weise infiziert
 und – mehr oder weniger – Unheil anrichtet.
 Somit: Virus-infiziertes Programm ist Trojanisches Pferd
mit der Eigenschaft, auch andere Programme
zu solchen Trojanischen Pferden zu machen.
SS-2
4
Aufbau eines Virus:
Erkennungsteil:
erkennt bereits infizierte Programme
Infektionsteil:
infiziert noch nicht infizierte Programme
Schadensteil:
enthält die Schadensfunktion
Bedingungsteil:
enthält Bedingungen für die genannten Aktivitäten
Tarnungsteil:
erschwert die Erkennung
SS-2
5
Typische Programmstruktur im Binärcode (vereinfacht)
gesund
0
1
JUMP START
infiziert
0
1
START
START
4710
4710
JUMP 4711
4711
Virus
JUMP START
SS-2
6
Arten von Viren:
– Datei-Viren: infizieren ausführbare Dateien
– Boot-Viren: infizieren den Boot-Sektor von Festplatten
– ... auch in Kombination (multipartite virus)
– Makro-Viren:
nicht Binärprogramme werden infiziert,
sondern Daten/Skripte, die von Interpretierern
für Skriptsprachen aufbereitet bzw. ausgeführt werden.
Makro-Viren sind wegen ihrer spezifischen Datenformate
in der Regel an bestimmte Anwendungen gebunden:
SS-2
7
Beispiel 1: Makros in Word (prominent: Melissa, 1999):

Aktionsfolgen zur Dokumentbearbeitung können in Makro
zusammengefasst werden - auslösbar z.B. mit Funktionstaste,

ferner automatische Ausführung beim Öffnen eines Dokuments.

Makrosprache hat Mächtigkeit einer Programmiersprache
(bei Word: VBA – Visual Basic for Applications,
oder VBS - Visual Basic Script, nicht nur für Word) !
 - Virus kann als Makro konzipiert werden,
- wird beim Öffnen eines infizierten Dokuments aktiviert;
- Verbreitung auf Windows-Systemen vor allem
durch E-mail (Outlook-Adressbuch!)
SS-2
8
Beispiel 2: VBS-Virus in Web-Dokumenten (prominent: HTML Internal):
Lokale infizierte Webseite infiziert alle .html- und .htm-Dateien
im lokalen Verzeichnis und in allen darüberliegenden Verzeichnissen.

Beim Laden einer infizierten Webseite wird das VBS-Skript
gestartet:
<body OnLoad=“CheckIt();“>

lokale Webseite?
<script language=“VBScript“>
<! -Sub CheckIt
If location.protocol = “file:“
then Call IsFile
End Sub
SS-2
9

eigentliche Virus-Aktivität_
erzeuge Dateisystemobjekt zum Zugriff aufs Dateisystem:
Sub IsFile
Set fso = CreateObject(“Script.FileSystemObject“)
erzeuge Windows-Verzeichnispfad:
HostPath = Replace(location.href, "file:///", ““)
HostPath = Replace(HostPath, “/“, “\“)
ermittle Vaterverzeichnis des aktuellen Verzeichnisses:
cpath = fso.GetParentFolderName(HostPath)
folder = fso.GetFolder(cpath)
SS-2
10
infiziere:
Set fso = CreateObject(“Script.FileSystemObject“)
While folder.IsRootFolder = false
Set fc = folder.Files
cpath = fso.GetParentFolderName(cpath)
For each f1 in fc
s = fso.GetExtensionName(f1.name)
If f1.path <> HostPath then
If s = “htm“ or s = “html“ then
fso.CopyFile HostPath,f1.path
End If
Wend
End Sub
vereinfacht: ganze Datei ersetzen
-->
</script>
SS-2
11
Maßnahmen von Viren, um unentdeckt zu bleiben:
– Stealth-Viren
• befallen lieber große Dateien als kleine, da
Größenänderung weniger auffällig
• klinken sich in den Überwachungsprozess von Viren ein,
z.B. Anti-Viren-Software: Verwischen von Spuren oder
Vorspiegeln falscher Informationen.
– Polymorphe Viren
• Selbstveränderung des Viren-Codes
– Retro-Viren
• bekämpfen aktiv Anti-Viren-Programme
SS-2
12
Nährboden für Viren:

starke Aktivität am Rechner
(Programmausführung)

Systeme ohne oder mit schwachen Schutzmechanismen
(z.B. MS-DOS, frühe Windows-Versionen)

Nachlässiger Umgang mit vorhandenen Schutzmechanismen
(Browser-Einstellungen, Warnmeldungen)
 System-Monokultur
(z.B. Windows für PCs)
 Einschleppen durch Programme/Daten dubioser Herkunft
(z.B. übers Netz)
- wie bei Trojanischen Pferden
SS-2
13
Gegenmaßnahmen:
 Beschränkung der Schreibrechte
 Datei-Integrität mittels Prüfsummen oder Verschlüsselung
 automatisches Ausführen von Makros ausschalten
 Viren-Scanner einsetzen
SS-2
14
2.3 Wurm
Programm, das sich über das Netz fortpflanzt,
entweder selbsttätig (prominent: Internet Worm, Morris 1988)
oder als Anhängsel von E-mails (prominent: Love Letter, 2000),
und auf den befallenen Rechnern Schaden stiftet.
! Benötigt kein Wirtsprogramm !
(d.h. Wurm ≠ Trojanisches Pferd)
SS-2
15
Auswahl:
• MyDoom, Januar 2004
– Verteiltes DoS auf Microsoft und SCO
– bisher schnellste Ausbreitung
– verbreitet über e-mail und peer-to-peer
• Sobig Worm, August 2003
– Verbreitung über Mail-Attachment
– Benutzt eigene SMTP-Engine zur Replikation
• SQL Slammer, Januar 2003
– Microsoft SQL 2000
– Buffer Overflow (Heap und Stack)
• Code Red, Juli 2001
– Index-Dienst des Microsoft Internet Information Server
(IIS)
– Buffer Overflow in Idq.dll
•
SS-2
http://en.wikipedia.org/wiki/Notable_computer_viruses_and_worms
16
Typische von Würmern benutzte Techniken:
 Nutzung von Diensten zur Fernausführung von Programmen,
(z.B. Unix rsh – ist i.a. aber gut geschützt, s.u.)
 Sicherheitslücken in Internet Daemons
(z.B. offengelassene Debug Option in sendmail führt zur
Annahme und Ausführung von Shell-Befehlen)
 Ausnutzung von Implementierungsschwächen
von Systemsoftware (  2.5)
 Skripte als Anlagen zu E-mails (z.B. in VBS geschrieben),
Öffnung führt zu weiterer Verbreitung
(z.B. mittels Adressdatei)
SS-2
17
Gegenmaßnahmen:
 Restriktive Vergabe von Zugriffsrechten
 Patches einspielen
 Sicherheitsmeldungen verfolgen
Beachte:
Im Gegensatz zu Viren handelt es bei Würmern um
um netzspezifische Schadsoftware
 Vorlesung Netzsicherheit
SS-2
18
Würmer versus Viren:
Wurm
– ist eigenständiges Programm
– kann sich selbsttätig fortpflanzen und Kopien auf
anderen Rechnern starten
Virus
– integriert sich in ein Wirtsprogramm
– ist nicht unabhängig vom Wirtsprogramm ablauffähig
Aber: manche Schadsoftware ist Zwitter Virus/Wurm (vgl. Melissa)
SS-2
19
2.4 Umgehung von Sicherheitsmechanismen
 Passwörter herausfinden (3)
 Dateischutz umgehen (4)
 Geheimcode knacken (8)
... u.a.
Beispiel Dateischutz umgehen:
Erfolgreicher Angriff mittels raffiniert geplanter
Folge von Aktionen, die der Schutz-Verantwortliche
nicht bedacht hat.
SS-2
20
Beispiel: Herrn Pohl ein Trojanisches Pferd unterschieben
% ll ~pohl
-rw-r----- 1 pohl
drwxr-x--x 1 pohl
.....
inst
inst
% ~pohl/bin/hello
Hello world!
4711 Feb 29 12:34 memo
512 Feb 10 12:01 bin
Leider ist bin nicht lesbar.
Ein Versuch . . .
. . . erfolgreich.
% cp trojan ~pohl/bin/hello
Noch ein Versuch . . .
. . . erfolgreiches Installieren
eines Trojanischen Pferdes
(cp ändert nur den Inhalt der Zieldatei, nicht deren Schutzstatus)
%
SS-2
21
2.5 Ausnutzung von Software-Verletzlichkeiten
Das klassische Beispiel: Puffer-Überlauf (buffer overflow)
Def.: Programmiersprache heißt unsicher (unsafe),
wenn Programmfehler die Speicherverwaltung stören können.
(chaotisches Programmverhalten, Absturz mit
„Bus Error“, „Segmentation Fault“ u.ä. )
Beispiele:
Pascal/Modula: ungültige Verweise
C/C++ ferner: Feldgrenzenüberschreitung
SS-2
22
Beispiel aus der Unix-C-Bibliothek:
SYNOPSIS
#include <stdio.h>
char *gets(char *s);
char *fgets(char *s, int n, FILE *stream);
DESCRIPTION
The gets() function reads characters from the standard input stream (see intro(3)),
stdin, into the array pointed to by s, until a newline character is read or an end-of-file
condition is encountered. The newline character is discarded and the string is
terminated with a null character.
The fgets() function reads characters from the stream into the array pointed to by s,
until n-1 characters are read, or a newline character is read and transferred to s, or
an end-of-file condition is encountered. The string is then terminated with a null
character.
When using gets(), if the length of an input line exceeds the size of s,
indeterminate behavior may result. For this reason, it is strongly recommended
that gets() be avoided in favor of fgets().
SS-2
23
! Noch mehr gefährliche Funktionen:
Standard C Library Functions
string(3C)
NAME
string, strcasecmp, strncasecmp, strcat, strncat, strlcat,
strchr, strrchr, strcmp, strncmp, strcpy, strncpy, strlcpy,
strcspn, strspn, strdup, strlen, strpbrk, strstr, strtok,
strtok_r - string operations
DESCRIPTION
The arguments s, s1, and s2 point to strings (arrays of characters
terminated by a null character). The strcat(), strncat(), strlcat(),
strcpy(), strncpy(), strlcpy(), strtok(), and strtok_r() functions all
alter their first argument. These functions do not check for overflow of
the array pointed to by the first argument.
SS-2
24
Standard C Library Functions
printf(3C)
NAME
printf, fprintf, sprintf, snprintf - print formatted output
DESCRIPTION
The sprintf() function places output, followed by the null byte
(\0), in consecutive bytes starting at s; it is the user's
responsibility to ensure that enough storage is available.
SS-2
25
Anwendung von gets z.B. so:
char line[100];
. . .
gets(line);
und der Programmierer vergißt, längere Zeilen (länger als 100)
als fehlerhaft abzufangen !
 bei längeren Zeilen wird der Keller beschädigt oder von einem Angreifer gezielt modifiziert !
 typischer Angriff:
SS-2
26
Typischer Angriff:
 Systemprogramm/prozess benutzen, das obigen Code enthält
 Keller durch planmäßig konstruierte Eingabe so manipulieren,
dass Rücksprungadresse umgesetzt wird,
 und zwar auf diejenige Adresse im Keller, auf der mit  eingeschleuster Code steht (der weiteren Code nachzieht);
 Effekt: Code des Angreifers läuft mit Rechten des Angegriffenen.
(So praktiziert beim Internet Worm unter Benutzung des fingerd Daemon!)
SS-2
27
Einfaches Beispiel 1
ohne Einschleusung von Code
Parameter main
argc, argv
void function (char *args ){
char buff2[4] = “ABC“;
char buff1[4];
strcpy(buff1,args);
}
int main( int argc, char *argv[]) {
if (argc >1)
function(argv[1]);
else
printf(“Kein Argument!“);
}
Parameter funct
args
Rücksprungadr.
aus function
lokale Variable
buff2
lokale Variable
buff1
(Keller wächst im Speicher von oben nach unten)
SS-2
28
höhere Adressen
Rücksprungadr.
aus main
Beispiel:
einen Netzdienst abschießen
(denial of service)
int main(int argc, char *argv[])
{
char
line[64];
...
... // initialize server
...
for ( ; ; ) {
connfd = accept( listenfd, (SA *) NULL, NULL);
write( connfd, "Eingabe: ", 9);
n = read( connfd, line, sizeof (line) -1 );
line[n] = 0;
serve( line );
close( connfd );
}
}
SS-2
29
void serve(char *str)
{
char buff[24];
strcpy(buff, str);
printf("buff: %s\n", buff);
}
 Eingaben,
die länger als 24 Bytes sind,
zerstören die Rücksprungadresse
- und bringen den Server zum Absturz
SS-2
30
Schutzmaßnahmen:
 Sichere Programmiersprachen!!
 Keller-Segment ohne "execute"-Rechte
(Solaris; OpenBSD 3.2; Linux: OpenWall, PaX)
(verhindert allerdings nicht den Überlauf als solchen)
 Andere Keller-Organisation,
Hüllen für die unsicheren Funktionen,
alle möglichen Tricks …
! Halde muss auch geschützt werden !
SS-2
31
Herunterladen