Sie sind auf Seite 1von 40

8.

Sicherheit
• Überblick
8.1 Grundlagen der Sicherheit
8.2 Benutzer-Authentifizierung
8.3 Angriffe von innerhalb des Systems
8.4 Angriffe von außerhalb des Systems
8.5 Schutzmechanismen
8.6 Sicherheitsanforderungen

Systemprogrammierung 1
8.1 Grundlagen der Sicherheit
• Aus Sicherheitsperspektive müssen von einem Betriebssystem
folgende Eigenschaften gewährleistet werden
➢ Datenvertraulichkeit: Geheime Daten müssen geheim bleiben
➢ Datenintegrität: Unautorisierte Benutzer dürfen nicht in der Lage sein,
Daten zu manipulieren (Ändern, Löschen, Austauschen, …)
➢ Systemverfügbarkeit: Sicherstellung einer Mindestverfügbarkeit
unabhängig von der aktuellen Lastsituation
➢ Datenschutz: Schutz vor Missbrauch der personenspezifischen Daten
• Korrespondierende Bedrohungen
➢ Aufdeckung, Manipulation, Denial-of-Service-Angriffe, Speicherung und
Kombination persönlicher Daten
• Außerdem Datenverlust durch Betriebsstörungen (Höhere Gewalt wie
Feuer), HW- und SW-Fehler, Fehlbedienung, …
➢ Aufbau von Redundanz, Backupstrategien

Systemprogrammierung 2
Eindringlinge
• Unterschiedliche Kategorien von Eindringlingen, die ein oder
mehrere Schutzziele gezielt angreifen
➢ Herumschnuffeln: Lesen von Daten anderer Benutzer, aus reiner
Neugier oder um persönlichen Vorteil zu ziehen
▪ Nicht technisch-versierte Benutzer: Ausnutzen bekannter Lücken,
Missbrauch der eigenen Rechte
▪ Technisch-versierte Benutzer: gezielte Angriffe mit großem Know-
how und Zeitaufwand
➢ Erzielen eines wirtschaftlichen Nutzens wie Einbruch bei
Bankcomputern und Geldüberweisung, …
➢ Militärische Spionage oder Wirtschaftsspionage
▪ Einbruch in Firmenrechner, um Programme, Geschäftsgeheimnisse,
patentwürdige Ideen, Technologien, … zu stehlen
 Einsatz mit vielen Mitteln und ernstzunehmenden Spezialisten
➢ Viren: In der Regel wird wahllos Schaden angerichtet

Systemprogrammierung 3
Kryptografie
• Ziel: Eine Nachricht in Klartext wird verschlüsselt und so in einen
Chiffretext überführt, dass nur autorisierte Personen eine
Rückgewinnung des Klartextes durchführen können
➢ Verschlüsselungsfunktion/Schlüssel zur Verschlüsselung (Encryption Key KE)
➢ Entschlüsselungsfunktion/Schlüssel zur Entschlüsselung (Decryption Key KD)
• Symmetrische Kryptografie (Secret-Key-Kryptografie)
➢ Schlüssel zur Verschlüsselung lässt sich aus dem Schlüssel zur
Entschlüsselung bestimmen und umgekehrt
• Public-Key-Kryptografie
➢ Benutzer lässt ein Schlüsselpaar (Private Key KD, Public Key KE) so erstellen,
dass KD KE (m) = KE KD (m) = m
▪ Public Key wird veröffentlicht (Webseite, Keyserver, Mail, …)  Jeder
mögliche Sender kann diesen Schlüssel bekommen
▪ Private Key bleibt beim Benutzer und ist geheim

Systemprogrammierung 4
Einwegfunktionen und digitale
Signaturen
• Einwegfunktionen: Wird x mit der Einwegfunktion f verschlüsselt, so ist die
Bestimmung von x aus dem Ergebnis f(x) praktisch unmöglich
➢ Verschlüsselung von Passwörtern
➢ Challenge/Response auf Chip Karten  Berechungsvorschrift f geheim
• Digitale Signaturen: Eindeutige Senderidentifikation
➢ Dokumentbearbeitung mit Einweg-Hash-Funktion  Ausgabe fester Länge
▪ MD5 (Message Digest): 16 Byte langes Ergebnis
▪ SHA (Secure Hash Algorithm): 20 Byte langes Ergebnis
➢ Signierung des Hash-Wertes und evtl. Verschlüsselung der gesamten
Nachricht
➢ Bei Ankunft
▪ Der Text wird entschlüsselt und der Hash-Wert wird berechnet
▪ Signatur wird entschlüsselt und die beiden Hash-Werte verglichen
▪ Stimmen die Werte nicht überein, so wurde der Text, die Signatur oder
beides manipuliert

Systemprogrammierung 5
8.2 Benutzer-Authentifizierung
• Feststellung der Benutzeridentität, wenn sich dieser in den
Computer einloggen will
• Realisierung der Authentifikation durch etwas, was der Benutzer
➢ Weiß  z.B. Passwortabfrage
➢ Besitzt  z.B. Chipkarten
➢ Ist  z.B. biometrische Abfragen
• Authentifizierung durch Passwörter
➢ Einfachste Implementierung basiert auf einer zentralen Liste, die
den Loginnamen und das Passwort enthält
➢ Vergleich der eingegebenen und gespeicherten Daten: Bei
Übereinstimmung wird der Zugriff gestattet

Systemprogrammierung 6
Schwachstellen bei
passwortgeschützten Systemen
• Angriffe durch Ausprobieren von Kombinationen (Login,
Passwort)
➢ Hilfe durch Wörterbücher, Namenslisten, …
➢ Untersuchungen: über 80% aller Passwörter sind unsicher
• Vorgehensweise
➢ Ermittlung aktiver, vernetzter Rechner, z.B. durch ping w.x.y.z 
aktive Rechner antworten und dienen als Ziele
➢ Ausprobieren der Passwortkombinationen wie z.B. ermöglicht Telnet
mehrfache Eingabe von Login/Passwort
➢ Oft Begrenzung möglicher sukzessiver Versuche  Starten vieler
paralleler Threads und Verteilung auf mehrere Rechner
➢ Sicherheitslücke nicht vollständig zu stopfen  Telnet ist mittlerweile
oft abgeschaltet oder nur von eingetragenen IP-Adressen erlaubt
➢ Installation von Paket-Sniffern zur Überwachung des
Netzwerkverkehrs und Aufspüren von interessanten Mustern

Systemprogrammierung 7
Passwortsicherheit in UNIX
• Passwort als Schlüssel zur Verschlüsselung eines festen Datenblocks
• Passwortdatei: je eine Zeile mit Attributen und verschlüsseltem
Passwort pro Benutzer
• Beim Einloggen: Verschlüsselung sofort nach Passworteingabe
 Vergleich der verschlüsselten Sequenzen bei Authentifizierung
 Niemand (auch nicht Sysadmin) kann die Passwörter in Klartext sehen
• Allerdings ist der Verschlüsselungsalgorithmus bekannt
 Wörterbuch kann entsprechend verschlüsselt und mit den Einträgen der
Passwortdatei verglichen werden
• Probleme früherer Versionen
➢ Passwortdatei (/etc/passwd) mit verschlüsselten Passwörtern auf der
Festplatte für Benutzer sichtbar
➢ Datei wird kopiert und zum Offlineausprobieren der Passwörter genutzt
➢ Mittlerweile getrennte Speicherung der Passwörter in Shadow-Datei

Systemprogrammierung 8
/etc/passwd und /etc/shadow

# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
rene:x:500:100:Rene:/home/rene:/bin/bash
christian:x:501:100:Christian:/home/christian:/bin/bash
user:password (x =>/etc/shadow) user-id:group-id:complete name:home directory: default shell

# ls –la /etc
-rw-r--r-- 1 root root 2687 Apr 7 2001 passwd
-rw-r----- 1 root shadow 1291 Mär 22 2002 shadow

# cat /etc/shadow
root:fntzjTtoSqExc:11749:0:10000::::
rene:YJMasdgfEN0M:11749:0:99999:7:::
christian:qdoncRTvonfDTVgh:11750:0:10000::::

username:coded pass: last_change:min_days: max_days:warn_days: inactive_days: expire_date

Systemprogrammierung 9
Verbesserung der
Passwortsicherheit
• Verzögerungsstrategien
➢ Erweiterung der Passwörter um eine n-Bit lange (UNIX n=12)
Zufallszahl vor der Verschlüsselung  Datei mit zu testenden
Passwörtern wird um Faktor 2n größer (Salt-Technik)
➢ Verschlüsselung der kompletten Passwortdatei. Eine spezielle Funktion
liefert Einträge auf Anfrage  verlangsamter Zugriff
• Schwer zu ermittelnder Passwörter, etwa mindestens 7 Zeichen,
nicht im Wörterbuch, Klein/Großschreibung, …
➢ Erzwingen einer regelmäßigen Änderung des Passworts
• Einmal-Passwörter: Passwortliste zur sequentiellen Bearbeitung
• Challenge-Response-Verfahren
➢ Abfrage von vorher eingegebenen und verschlüsselt gespeicherten
Fragen, z.B. Name der Klassenlehrerin in der achten Klasse?
➢ Vereinbarter Algorithmus muss mit einem vom Server gesendeten Wert
ausgeführt werden  Ergebnis = Passwort

Systemprogrammierung 10
Authentifizierung durch
Gegenstände
• Benutzer muss etwas haben: Schlüssel  Türschlösser
• Benutzer muss etwas haben und wissen: Karte + PIN
➢ Magnetstreifenkarten: 140 Byte, oft ist das verschlüsselte Passwort dabei
 riskant, da Lese/Schreibgeräte weit verbreitet
➢ SmartCards: kleine CPU vorhanden
▪ Aufbau einer Verbindung zum Server, der dann Daten sendet
▪ SmartCard verarbeitet die Daten und sendet das Ergebnis als Passwort
zurück  Berechnungsvorschrift geheim

Smart card reader

Systemprogrammierung 11
Biometrische Authentifizierung
• Messung (Registrierung) und Vergleich (Identifizierung) von
charakteristischen, schwer zu fälschenden Merkmalen des Benutzers
• Speicherung der Merkmale auf zentralem Rechner/SmartCard
• Entscheidend: Güte der Merkmale
➢ Weite Streuung (Haarfarbe kein gutes Merkmal)
➢ Keine gravierende Änderung im Laufe der Zeit
➢ Erkennung der Veränderungen (Sonnenbräune, Makeup, Erkältung, …)
• Typische Merkmale
➢ Fingerlänge, Fingerabdrücke  Probleme bei Gipsvorlagen
➢ Scann der Netzhaut  Probleme beim Abfotografieren
➢ Automatische Unterschriftenanalyse  Probleme bekannt
➢ Stimmbiometrie  Täuschung durch Stimmaufnahmen
• Kombination verschiedener Merkmale erhöht die Sicherheit, reduziert
aber die Akzeptanz der Sicherheitsmaßnahmen unter den Benutzern

Systemprogrammierung 12
8.3 Angriffe von innerhalb des
Systems
• Passwort geknackt  unterschiedliche Schäden möglich
➢ Eher sichere Systeme: lediglich der Benutzer, dessen Passwort geknackt
wurde, erleidet Schaden
➢ Eher unsichere Systeme: der erste Zugang dient lediglich als Startpunkt,
um wesentlich größeren Schaden einzurichten
• Beispiel Trojanische Pferde
➢ Scheinbar harmloses Programm, dessen Code aber unerwartete und
unerwünschte Funktionalität ausführt
➢ Vorgehensweise
▪ Tarnen des Programms (Spiele, MP3-Player, …)  Benutzer laden
und installieren das Programm freiwillig
▪ Wenn das Programm einmal läuft, kann es alles tun, wozu der
aktuelle Benutzer berechtigt ist, z.B. Daten übers Netz versenden,
Dateien modifizieren, teure Nummern anrufen, …

Systemprogrammierung 13
Login-Spoofing
• Dient dem Ausspionieren von Passwörtern bei der Einloggprozedur
➢ Programm bildet die Eingabemaske exakt nach
➢ Falls der Benutzer die Fälschung nicht mitbekommt, so gibt er sein
Login/Passwort wie gewohnt ein
➢ Daten werden in Datei geschrieben und die Shell beendet sich  Erst
jetzt wird der richtige Einloggbildschirm dargestellt
➢ Benutzer denkt, er hätte sich vertippt und wiederholt den Einloggprozess
 Fälschung bleibt unbemerkt
➢ Die gespeicherten Daten können später in Ruhe abgerufen werden
• Schutzmöglichkeit
➢ Starten der Einloggprozedur mit einer Tastenkombination, die von einem
Benutzerprogramm nicht abgefangen werden kann
➢ Beispiel Windows
▪ CTRL+ALT+DEL loggt aktuellen Benutzer aus, startet Loginprozedur
▪ Umgehung dieses Mechanismus ist nicht möglich

Systemprogrammierung 14
Logische Bomben und versteckte
Hintertüren
• Logische Bomben = vom Programmierer beim Erstellen des
Programms eingebrachter Code, der Schaden einrichten kann
➢ Oft zur Erpressung des Arbeitsgebers eingesetzt
➢ Solange das Passwort des Entwicklers täglich kommt oder sein Name auf
der Gehaltsliste steht, passiert nichts
➢ Bei Entlassung: Code wird aktiviert und richtet Schaden an
• Versteckte Hintertüren
➢ Veränderung der Einloggprozedur, so dass mit einem bestimmten
Loginnamen das Einloggen jederzeit und auf allen vom Hersteller
ausgelieferten Systemen möglich ist  Hintertür umgeht den gesamten
Authentifizierungsprozess
• Vermeidung von logischen Bomben/versteckten Hintertüren durch
Einführung eines konsequenten, ausgiebigen Code Reviews möglich
➢ Entwickler erklärt den Code Zeile für Zeile den restlichen Teammitgliedern
➢ Ein oder mehrere Entwickler überprüfen den Code der anderen
Teammitglieder  siehe Software Engineering
Systemprogrammierung 15
Pufferüberläufe
(Buffer Overflows)
• Umlenkung der Rücksprungadresse auf ein eingeschleustes Programm
➢ Bei Funktionsaufrufen: Rücksprungadresse und Parameter auf den Stapel
➢ Für bestimmte Parameter – z.B. einen Dateinamen – wird Speicherplatz
gemäß der Definition des Strings reserviert
➢ Wird diese Grenze durch einen extralangen Namen überschritten, so wird
die Rücksprungadresse überschrieben und somit abgeändert
▪ Sprung in fremden/gesperrten Adressraum  Absturz
▪ Pufferinhalt = Programm, das ausgeführt wird  Großer Schaden

Systemprogrammierung 16
Pufferüberläufe (2)
• Wo kann dieser Fehler auftreten?
➢ Überall, wo Felder fester Größe für Benutzereingaben benutzt werden
(Dateinamen, Umgebungsvariablen, Datenabfragen, …)

• Wie findet man solche Sicherheitslücken?


➢ Extremeingaben bei allen Aufforderungen: Stürzt das Programm ab,
so wahrscheinlich wegen eines Pufferüberlaufs
➢ Analyse des Fehlerreports (z.B. core Datei) kann u.U. Rückschlüsse
auf den Stackaufbau zu dem Zeitpunkt erlauben
➢ Noch einfacher geht es bei offenen Quellen (in beiden Richtungen,
sowohl Ausnutzen als auch Verhindern)

• Verhinderung: Nutzung von Routinen, die Stringlänge limitieren


➢ fgets anstatt von gets
➢ strncpy anstatt von strcpy

Systemprogrammierung 17
8.4 Angriffe von außerhalb des
Systems
• Vernetzung  vielfältige Angriffsmöglichkeiten von außerhalb
• Häufige Angriffe
➢ Denial-of-Service-Angriffe: Rechnerüberflutung mit sinnlosen Anfragen
➢ Viren: Programme, die sich durch Anhängen an andere Programme /
Dokumente replizieren können und evtl. Schaden anrichten
▪ Companion Viren: Ähneln – bis auf die Endung – einem existierenden
Programm und werden zuerst ausgeführt
▪ Überschreibende Viren: Ersetzen existierende Programme
▪ Parasitäre Viren: Hängen sich an Programm an, werden ausgeführt und
erlauben anschließend die Ausführung des tatsächlichen Programms
▪ Makroviren: Versteck in Anwendungen, die benutzerdefinierte Makros
aufnehmen und ausführen können
▪ Speicherresidente Viren, Bootsektorviren, Treiberviren, Quellcodeviren, …
➢ Phishing, …

Netzwerksicherheit ist ein sehr umfangreiches Thema  Siehe Vorlesungen


im Bachelor / Masterbereich, aktuell fehlen Grundlagen der Netzwerke
Systemprogrammierung 18
8.5 Schutzmechanismen
• Grundlage für die Sicherheit ist das Domänenkonzept (domain)
➢ Domäne = Menge von Paaren (Objekt, Rechte)
➢ Jedes Paar spezifiziert ein eindeutig identifiziertes Objekt (HW, Prozesse,
Dateien, Semaphore, …) und die darauf ausführbaren Operationen
➢ Recht = Erlaubnis zur Ausführung einer Operation
➢ Domäne kann einem Benutzer entsprechen, aber auch allgemeiner Natur
sein
➢ Ein Prozess läuft zu jedem Zeitpunkt in einer einzigen Schutzdomäne
➢ Domänenwechsel ist möglich, die dazugehörigen Regel sind hochgradig
vom aktuellen System abhängig
• Domänenkonzept bei UNIX
➢ Domäne eines Prozesses wird durch BenutzerID (UID) und GruppenID
(GID) festgelegt  für jede Kombination (UID, GID) lässt sich eine Liste
mit allen benutzbaren Objekten (HW, SW, …) erstellen
➢ Prozessaufteilung in Benutzer- und Kernteil, die in unterschiedlichen
Domänen laufen  Systemaufruf verursacht einen Domänenwechsel
Systemprogrammierung 19
Realisierung des
Domänenkonzepts
• Konzeptionell: Modellierung der Übersicht über Domänen und
zulässige Operationen für verschiedene Ressourcen durch eine Matrix
➢ Ein Objekt pro Spalte, eine Domäne pro Zeile
➢ Zellen enthalten – falls vorhanden – die zulässigen Operationen
➢ Domänen sind selbst Objekte  Modellierung des Übergangs von einer
Domäne in eine andere Domäne
• Matrixdarstellung ineffizient, da zu viele leere Felder vorhanden 
Speicherung nur der Spalten (ACL) oder der Zeilen (Capabilities)
Object

Domain

Systemprogrammierung 20
Realisierung des
Domänenkonzepts (2)
• Zugriffskontrolllisten (Access Control Lists, ACL)
➢ Eine Liste pro Objekt spezifiziert, welcher Prozess, Benutzer, …
(allgemein: Subjekt) welche Operation (für dieses Objekt) ausführen darf
▪ Unix: Unterscheidung zwischen Rechten für den Eigentümer der
Datei, die Mitglieder einer Gruppe und die restlichen Benutzer
▪ Windows: Beliebig viele Einträge  genauere, fein spezifizierte
Kontrolle
• Capabilities: Spezifizieren die Berechtigung eines Subjekts, auf ein
bestimmtes Objekt zuzugreifen
 jedem Subjekt wird seine eigene Domäne angehängt
➢ Verwaltung in einer Liste, wobei jeder Eintrag folgendes angibt
▪ Referenz auf das Objekt
▪ Menge der zugelassenen Operationen
➢ Liste wird z.B. durch Verschlüsselung geschützt

Systemprogrammierung 21
Zugriffskontrolllisten

• Prozesse in unterschiedlichen Domänen (A, B, C) und Dateien F1, F2, F3


mit eigenen ACL-Listen, welche die Zugriffsrechte für Subjekte in den
Domänen spezifizieren (R=Read, W=Write, X = eXecute)
• Bei UNIX Definition von Benutzern (UID) und Gruppen (GID)
➢ Ein Benutzer kann in mehreren Gruppen eingetragen sein, z.B. sysadmin,
postmaster, mitarbeiter, …
➢ Beim Zugriff  Überprüfung, ob die Kombination (UID, GID) in der ACL
vom Objekt enthalten ist
Systemprogrammierung 22
Capabilities (C-Listen)
• Jedes Subjekt hat Liste mit Rechten für bestimmte Objekte 
Capability = Objektbezeichner + Bitmap für Zugriffsrechte
• Schutz der C-Listen
➢ Tagged Architecture: Spezielles Bit zeigt an, ob das Speicherwort eine
Capability enthält  Änderung nur im Kernmodus möglich
➢ C-Listen werden innerhalb des BS-Kerns gehalten und über ihre Position
referenziert
➢ Verschlüsselte C-Listen im Benutzermodus  Manipulation durch
Benutzer nahezu unmöglich

Systemprogrammierung 23
8.6 Sicherheitsanforderungen
• Trusted Computer System Evaluation Criteria (TCSEC): Orange
Book (1983)
➢ Sicherheit von Rechnersystemen von US Verteidigungsministerium
• Unterschiedliche Sicherheitsklassen definieren Anforderungen an
Sicherheitspolitik, Verantwortlichkeit
D – minimaler Schutz (niedrigste Klasse)
C1 – Sicherheitsschutz nach Ermessen (Aktuelle Einstufung von Linux)
C2 – Kontrollierter Zugriffsschutz (Aktuelle Einstufung von Windows)
B1 – Sicherheitsschutz mit Etiketten
B2 – Strukturierter Schutz
B3 – Sicherheitsdomänen
A1 – verifizierter Entwurf (die höchste Klasse)

Systemprogrammierung 24
C2-Standard Umsetzung
• Sicheres Anmelden mit Antispoofing-Maßnahmen
➢ Strg-Alt-Entf wird immer vom Tastaturtreiber erkannt und startet
darauf ein Systemprogramm mit originalem Anmeldebildschirm
• Frei einstellbare Zugriffskontrollen
➢ Besitzer einer Datei vergibt Rechte, eine Datei kann für verschiedene
Benutzergruppen mit verschiedenen Rechten ausgestattet sein
• Privilegierte Zugriffskontrollen
➢ Administrator hat Zugriff auf Dateien von einem „normalen User“,
kann Dateirechte überschreiben (ändern)
• Schutz des Adressraumes für jede einzelne Person
➢ Jeder Prozess hat eigenen, abgeschotteten Adressraum im Speicher
• Stackseiten müssen vor Einlagerung mit Nullwerten belegt werden
➢ Keine Information über vorherigen Besitzer vom Stack abrufbar
• Security auditing
➢ Aufzeichnung (Log) über sicherheitsrelevante Ereignisse

Systemprogrammierung 25
Vertrauenswürdige Systeme
• Gründe für Existenz nicht-sicherer Systeme
➢ Bequemlichkeit der Benutzer: Bereitschaft auf einzelne potentiell
gefährliche Features zu verzichten, ist gering
▪ Word-Attachments in E-mails anstatt ASCII Mails
▪ Öffnung von Attachments aus E-mails mit einem Klick, …
➢ Komplexität der Systeme
▪ Hinzufügen neuer Features birgt potentielle Fehler und Gefahren
▪ Notwendigkeit eines Sicherheitssystems im Kern des BS, das einfach
genug ist, um vollständig verstanden zu werden und das nicht durch
zusätzliche, nicht zwingend notwendigen Features aufgebläht wird
• Begriff eines vertrauenswürdigen Systems (Trusted Computing Base)
statt eines sicheren Systems
➢ Minimale HW und SW, die einer Sicherheitsspezifikation folgt, diese
vollständig umsetzt und nicht kompromittiert werden kann
➢ Bestandteile: HW, Betriebssystemkern, alle Programme mit
Superuserrechten
Systemprogrammierung 26
Vertrauenswürdige Systeme (2)
• Betriebssystemfunktion als Teil der TCB
➢ Prozesserzeugung, Prozessumschaltung, Teile des
Speichermanagements, Teile des Datei- und E/A-Managements
➢ Andere Komponenten werden vollständig vom Kern getrennt, um die
Größe zu minimieren und die Korrektheit zu verifizieren
• Wichtiger Teil: Referenzmonitor
➢ Überprüfung aller Systemaufrufe, die für die Sicherheit relevant sind
➢ Konzentration aller Sicherheitsentscheidungen an einem Ort
➢ Keine Möglichkeit zur Umgehung des Referenzmonitors

Benutzerprozess

Überprüfung aller
Systemaufrufe

Systemprogrammierung 27
Absicherung eines
Betriebssystems nach NIST
• Während die Details der Absicherung jedes einzelnen
Betriebssystems unterschiedlich sind, ist der allgemeine
Ansatz ähnlich
• Für die meisten gängigen Betriebssysteme gibt es
entsprechende Anleitungen und Checklisten zur
Sicherheitskonfiguration
• Standardkonfiguration vieler Betriebssysteme orientiert
sich oft die Benutzerfreundlichkeit und Funktionalität,
nicht an Sicherheit
• Organisation haben eigene Sicherheitsbedürfnisse und
-policies, die unterschiedlich streng sind

Systemprogrammierung 28
Absicherung eines
Betriebssystems nach NIST
• Basisschritte nach NIST (National Institute of Standards
and Technology)
➢ Installieren, konfigurieren und patchen des Betriebssystems,
um die identifizierten Sicherheitsanforderungen des Systems
adäquat zu erfüllen
➢ Konfigurieren von Benutzern, Gruppen und Berechtigungen
➢ Konfigurieren von Ressourcenkontrollen
➢ Installieren und Konfigurieren zusätzlicher
Sicherheitskontrollen, wie z. B. Virenschutz, Host-basierte
Firewalls und Intrusion Detection System (IDS)
➢ Entfernen von unnötigen Diensten, Anwendungen und
Protokollen
➢ Testen um sicherzustellen, dass die ergriffenen Maßnahmen
den Sicherheitsanforderungen gerecht werden

Systemprogrammierung 29
Zusätzliche
Sicherheitsmassnahmen
• Die Installation von zusätzlichen Massnahmen kann
helfen bei
➢ Prävention: Intrusion Detection Systeme, Firewalls,
Antivirensoftware
➢ Reaktion: Honeypots
➢ Analyse: Host-based intrusion detection

• Explizite Freigabe von Nutzern, Ressourcen,


Anwendungen, Verbindungen erforderlich

Systemprogrammierung 30
Zum Abschied

• Statistik ist eine exakte Methode, Halbwahrheiten ungenau auszudrücken


• File not found. Should I fake it? (Y/N)
• Black holes were created when God divided by 0.
• Beware of bugs in the above code; I have only proved it correct, not tried
it. -- Donald E. Knuth
• Computer Science is no more about Computers than astronomy is about
telescopes
• And 1.1.81 is officially BugFree(tm), so if you receive any bug-reports on
it, you know they are just evil lies. -- Linus Torvalds
• No question is too silly to ask, but, of course, some are too silly to answer

Vielen herzlichen Dank für die Aufmerksamkeit und


viel Glück bei der Klausur
Systemprogrammierung 31
Zusatz zu Buffer Overflow

Mehr Details für Interessierte

Systemprogrammierung 32
String-Library Code
• Warum kann ein solcher Programmierfehler überhaupt passieren?
➢ Keine Überprüfung der Bereichsgrenzen in C weder bei
Programmerstellung noch zur Laufzeit
• Beispiel: Implementation der Unix Funktion gets
➢ Keine Möglichkeit zur Spezifikation der Anzahl der zu lesenden Zeichen
• Ähnliche Probleme auch bei anderen Unix Funktionen
➢ strcpy: kopiert einen String beliebiger Länge
➢ scanf, fscanf, sscanf, mit %s Konvertierungsspezifikation
/* Get string from stdin */
char *gets(char *dest) {
int c = getc();
char *p = dest;
while (c != EOF && c != '\n') {
*p++ = c;
c = getc(); } }
*p = '\0';
return dest;
}
Systemprogrammierung 33
Boshafte Nutzung von
Bufferoverflow
• Mit Buffer overflow-Bugs kann man beliebigen Code auf der
fremden Maschine ausführen
➢ Eingabe String enthält binär Codierung des ausführbaren Codes
➢ Überschreibt Rücksprungadresse mit Adresse des Buffers
➢ Wenn bar() ret ausführt, erfolgt der Sprung zum Exploit code

void foo(){
bar(); foo stack frame
return ...
address }
A B
Daten

void bar() { geschrieben


char buf[64]; pad
gets(buf); von
... exploit
}
gets() bar stack frame
code
B

Systemprogrammierung 34
Angreifbarer Buffer-Code
/* Echo Line */ unix>./bufdemo
void echo()
Type a string:123
{
char buf[4];/*too small! */ 123
gets(buf);
puts(buf);
} unix>./bufdemo
Type a string:12345
int main()
{ Segmentation Fault
printf("Type a string:");
echo();
return 0; unix>./bufdemo
} Type a string:12345678
Segmentation Fault

Systemprogrammierung 35
Buffer overflow
Stack /* Echo Line */
Frame void echo()
{
for main char buf[4]; /* Way too small! */
Return Address gets(buf);
Saved %ebp %ebp puts(buf);
[3] [2] [1] [0] buf
}
Stack
echo:
Frame
pushl %ebp # Save %ebp on stack
for echo movl %esp,%ebp
subl $20,%esp # Allocate space on stack
pushl %ebx # Save %ebx
addl $-12,%esp # Allocate space on stack
leal -4(%ebp),%ebx # Compute buf as %ebp-4
pushl %ebx # Push buf on stack
call gets # Call gets
. . .
Systemprogrammierung 36
Buffer overflow (2.)

Vor Aufruf von gets

Stack Stack
Frame Frame
for main for main
Return Address 08
Return
04 Address
86 4d
Saved %ebp %ebp bf Saved
ff f8
%ebp
f8 0xbffff8d8
[3] [2] [1] [0] buf [3]
xx [2]
xx [1]
xx [0]
xx buf
Stack Stack
Frame Frame
for echo for echo

8048648: call 804857c <echo>


804864d: mov 0xffffffe8(%ebp),%ebx # Return Point

Systemprogrammierung 37
Stack während Bufferoverflow: #1

Vor dem Aufruf von gets Eingabe: “123”


Stack Stack
Frame Frame
for main for main
Return Address 08
Return
04 Address
86 4d
Saved %ebp %ebp bf Saved
ff f8
%ebp
f8 0xbffff8d8
[3] [2] [1] [0] buf [3]
00 [2]
03 [1]
02 [0]
01 buf
Stack Stack
Frame Frame
for echo for echo

Kein Problem

Systemprogrammierung 38
Stack während Bufferoverflow #2
Eingabe: “12345”
Stack Stack
Gespeicherter Wert
Frame Frame von %ebp wird auf
for main for main 0xbfff0035 gesetzt
Return Address 08
Return
04 Address
86 4d
Saved %ebp %ebp bf Saved
ff 00
%ebp
05 0xbffff8d8 Schlechte Nach-
[3] [2] [1] [0] buf [3]
04 [2]
03 [1]
02 [0]
01 buf richt, wenn später
Stack Stack versucht wird den
Frame Frame Wert von %ebp
wiederherzustellen
for echo for echo
echo Code:
8048592: push %ebx
8048593: call 80483e4 <_init+0x50> # gets
8048598: mov 0xffffffe8(%ebp),%ebx
804859b: mov %ebp,%esp
804859d: pop %ebp # %ebp gets set to invalid value
804859e: ret

Systemprogrammierung 39
Stack während Bufferoverflow #3
Stack Stack Eingabe: “12345678”
Frame Frame
for main for main
Return Address 08
Return
04 Address
86 00
Saved %ebp %ebp 08 Saved
07 06%ebp
05 0xbffff8d8
[3] [2] [1] [0] buf [3]
04 [2]
03 [1]
02 [0]
01 buf
Stack Stack
Frame Frame %ebp und Rück-
sprungadresse
for echo for echo
überschrieben
Ungültige Adresse

Zeigt nicht mehr auf die


gewünschte Rücksprungadresse

8048648: call 804857c <echo>


804864d: mov 0xffffffe8(%ebp),%ebx # Return Point

Systemprogrammierung 40

Das könnte Ihnen auch gefallen