DIPLOMARBEIT. Lokalisierung und Vermeidung potentieller Sicherheitsschwachstellen in komplexen Softwaresystemen

Größe: px
Ab Seite anzeigen:

Download "DIPLOMARBEIT. Lokalisierung und Vermeidung potentieller Sicherheitsschwachstellen in komplexen Softwaresystemen"

Transkript

1 DIPLOMARBEIT Lokalisierung und Vermeidung potentieller Sicherheitsschwachstellen in komplexen Softwaresystemen durchgeführt am Studiengang Informationstechnik und System Management an der Fachhochschule Salzburg vorgelegt von: Roland J. Graf Studiengangsleiter: Betreuer: FH-Prof. DI Dr. Thomas Heistracher DI(FH) Thomas Kurz Salzburg, September 2007

2 Eidesstattliche Erklärung Hiermit versichere ich, Roland J. Graf, geboren am 6. Mai 1964, dass die vorliegende Diplomarbeit von mir selbständig verfasst wurde. Zur Erstellung wurden von mir keine anderen als die angegebenen Hilfsmittel verwendet. Roland Graf Matrikelnummer ii

3 Danksagung Alles Wissen und alle Vermehrung unseres Wissens endet nicht mit einem Schlusspunkt, sondern mit Fragezeichen. Hermann Hesse ( ) Meinen Eltern gebührt an dieser Stelle mein besonderer Dank. Gerade die ersten Jahre meiner schulischen Laufbahn waren alles andere als Erfolg versprechend und trotzdem haben sie mir bei der Wahl meiner Ausbildung stets alle Freiheiten gelassen, mir ihr Vertrauen entgegengebracht und an mich geglaubt. Um die Lust am Lernen nicht zu verlieren, braucht es Lehrer, die neben den fachlichen auch menschliche Werte vermitteln. Ich hatte das Glück, einige dieser ganz wenigen Lehrer zu treffen. Stellvertretend möchte ich hier besonders Hr. Prof. Dr. Gerold Kerer hervorheben, der nicht nur bereits vor über 20 Jahren als mein HTL-Lehrer mit seinen fachlichen und pädagogischen Fähigkeiten glänzte, sondern mich auch in der FH-Salzburg wieder durch seine außergewöhnliche Menschlichkeit und Qualifikation beeindruckt hat. Dank gilt auch meinen Kollegen am Studiengang ITS, die mich in so manchen Gesprächen und Diskussionen mit ihren Eingaben, Ideen, Fragen und Hinweisen geleitet haben. Besonders hervorheben möchte ich meinen Diplomarbeitsbetreuer DI(FH) Thomas Kurz und allen voran FH-Prof. DI Dr. Thomas Heistracher, welche mich auch als Reviewer mit konstruktiver Kritik sehr unterstützt haben. Von meinen Kommilitonen verdient Dietmar eine Erwähnung. Durch seine kritischen Verbesserungsvorschläge hat er mich oft zu einer Mehrleistung getrieben. Zuletzt möchte ich noch Sabine danken. Ohne sie wäre mein Studium neben dem Beruf so gar nicht möglich gewesen. Sie hat mich über all die Jahre tatkräftig unterstützt und mir auch in schweren Zeiten den notwendigen Halt, die Kraft und die Stabilität gegeben, die ich gebraucht habe. Niemand kann so positiv formulieren, wie sie es tut und so war ich bevorteilt, indem sie als Germanistin all meine Arbeiten sprachlich redigiert hat. Ihr gebührt jedenfalls mein größter Dank! Und wenn Hesse folgend nun all meine Anstrengung zur Vermehrung des Wissens mit einem Fragezeichen endet, dann bleibt noch eine Frage zu stellen: Was kommt jetzt? iii

4 Informationen Vor- und Zuname: Institution: Studiengang: Titel der Diplomarbeit: Betreuer an der FH: Roland J. Graf Fachhochschule Salzburg GmbH Informationstechnik & System-Management Lokalisierung und Vermeidung potentieller Sicherheitsschwachstellen in komplexen Softwaresystemen DI(FH) Thomas Kurz Schlagwörter 1. Schlagwort: Software Security 2. Schlagwort: Software Vulnerability 3. Schlagwort: Code Injection Abstract This diploma thesis documents the usability of tools to localize potential security vulnerabilities and evaluates the effectiveness of development methods to avoid them. Mostly, vulnerabilities are based on software bugs and design flaws. This paper provides the basics of memory segmentation, processor registers and stack frames, before it explains software bugs as the cause of potential software vulnerabilities and their risk potential. A variety of software tools are available to implement Static White Box Tests and Dynamic Black Box Tests. Source Code Analysis Tools support the developers to parse for potential bugs in the source code, Debugging, Tracing and Monitoring Tools help the software and security testers to spy on data flows, function calls and flaws in executable binaries. This document reports the strengths and weaknesses of tested tools and methods and discusses their expected effectiveness in production environments. Adapted development methods can increase the resistance of software to attacks and unauthorized data manipulations. Finally, an introduction to Defensive Programming with helpful programming hints, additional tables and references, code examples, and Best Practices for programmers will be given, which aims at helping developers to write secure software. iv

5 Inhaltsverzeichnis Eidesstattliche Erklärung Danksagung Informationen Schlagwörter Abstract Abbildungsverzeichnis Tabellenverzeichnis Listingverzeichnis ii iii iv iv iv x xi xii 1 Einführung Global vernetzte Sicherheitsschwächen Stabile Software(un-)sicherheit Motivation Überblick Grundlagen Komplexe Softwaresysteme Speicherorganisation Prozessspeicher Text-Segment Data-Segment Heap v

6 2.2.5 Stack Register Daten und Funktionszeiger Potentielle Schwachstellen Designfehler Overflow Fehler Stack Overflow Der klassische Stack Overflow Frame Pointer Overwrite Heap Overflow Array Indexing Overflows BSS Overflow Format-String Fehler Lokalisierung potentieller Schwachstellen Allgemeines Informationsgewinnung Vollständige Sicherheitsanalyse Statische und dynamische Analyseverfahren Quelltextbasierte Analyse Lexikalische Analyse Grep RATS Flawfinder ITS Semantische Analyse C++ Compiler Splint CQUAL PREfast und PREfix Bewertung der Methoden und Werkzeuge Binärcodebasierte Analyse vi

7 4.3.1 Disassembling Debugging Tracing und Monitoring API-Schnittstellenanalyse Datenflussanalyse Speichermanagementanalyse Speicherabbilder Status- und Fehlerinformationen Fault Injection Bewertung der Methoden und Werkzeuge Integrierte Analyse und Überwachung Bounds Checking Überwachung des Stacks Überwachung von Funktionen Überwachung des Heaps Bewertung der integrierten Methoden Vermeidung potentieller Schwachstellen Allgemeines Sicheres Design Threat Modeling Defensive Programmierung Überprüfung der Ein- und Ausgabedaten Sichere Zeiger- und Speicherverwaltung Fehlerbehandlung Hilfen zur Fehlersuche Sichere Bibliotheksfunktionen Fehlerfreie Bibliotheksfunktionen Bibliothekserweiterungen Wrapper Sicherere Programmiersprachen Sichereres C und C Managed Code und Managed Memory Zusätzliche Techniken Bewertung der Methoden vii

8 6 Zusammenfassung und Ausblick Zusammenfassung Ausblick Trends Literaturverzeichnis 93 Abkürzungsverzeichnis 101 Anhang 103 A APIs und Bibliothekserweiterungen 104 A.1 Die Standardbibliotheken A.1.1 Unsichere POSIX C-Funktionen A.1.2 Unsichere Windows CRT-Funktionen B Protokolle 108 B.1 Lexikalische Quelltextanalysen B.1.1 grep Protokoll B.1.2 ITS4 Analyseprotokoll B.1.3 RATS Analyseprotokoll B.1.4 Flawfinder Analyseprotokoll B.2 Semantische Quelltextanalysen B.2.1 Microsoft C/C++ Compiler Analyseprotokoll B.2.2 GCC Compiler Analyseprotokoll B.2.3 Splint Analyseprotokoll C Listings 120 C.1 Absicherung des Stacks über Security Cookies C.2 Einfache Speicherüberwachung in C C.3 Defensive Programmierung C.3.1 Überprüfung der Eingabedaten C.3.2 Zeiger und Speicherbehandlung C.4 Sichere Programmiersprachen C.4.1 Sicheres C viii

9 C.4.2 Automatisches Bounds Checking in C# C.5 Sichere Bibliotheksfunktionen C.5.1 Sicherung der Funktionen über Return Codes C.5.2 Sicherung von Funktionen über Exceptions D Sicherheits-Tools und Bibliotheken 129 D.1 Statische Analysewerkzeuge D.2 Dynamische Analysewerkzeuge D.3 Sonstige Werkzeuge E Good Practices für sichere Software 137 E.1 Ein- und Ausgabedaten E.2 Zeiger- und Speicherbehandlung E.3 Fehlerbehandlung E.4 Hilfe zur Fehlersuche F Weiterführende Online-Quellen 141 F.1 Dokumente und Links zu Codesicherheit F.2 News, Newsletter und Mailing-Listen ix

10 Abbildungsverzeichnis 2.1 Typisches Speicherabbild einer laufenden Applikation Daten- und Funktionszeiger Manipulationen durch einen Stack Overflow Manipulationen durch einen Heap Overflow Manipulationen durch einen Off-By-One Overrun Debugging Session innerhalb einer Applikation APISPY beim Aufspüren sicherheitskritischer Funktionen RegMon beim Protokollieren von Zugriffen auf die Windows Registry Stackschutzmechanismen mit Security Cookies Fehlermeldung nach einem Heap Overflow x

11 Tabellenverzeichnis 3.1 Ausgewählte Format-String Platzhalter der printf-familie Zusammenstellung einiger Fuzzing Werkzeuge A.1 Unsichere POSIX-Funktionen A.2 Unsichere Windows CRT-Funktionen A.3 Template Overloads für unsichere Windows CRT-Funktionen D.1 Auswahl einiger statischer Analysewerkzeuge D.2 Auswahl einiger dynamischer Analysewerkzeuge D.3 Auswahl einiger Sicherheitswerkzeuge xi

12 Listingverzeichnis 2.1 Programm mit Variablen verschiedener Speicherklassen Beispielprogramm StackOverflow.c Stackdump innerhalb des Programms StackOverflow.c Beispielprogramm HeapOverflow.c Beispiel eines Off-By-One Fehlers im Programm StackOverflow.c Frame Pointer Manipulation durch Off-By-One Fehler Beispielprogramm PrintDemo.c Stackdump innerhalb des Programms PrintDemo.c Testprogramm zur Codeanalyse mit einem C++ Compiler Disassembliertes Programm PrintfDemo.c Erweiterung zur Fehlersuche in einer DEBUG-Version C.1 Prolog- und Epilog-Erweiterungen zur Behandlung von Security Cookies 120 C.2 Include-Datei zum Überladen des new-operators C.3 Quelltext mit Buffer Overflow und Memory Leak Fehler C.4 Defensive Programmierung innerhalb der.net Standard Library C.5 Zeiger- und Speicherbehandlung bei defensiver Programmierung C.6 Auszug aus einem STL Programm mit Smart-Pointers und Strings C.7 C# Programm mit einem Array Indexing Fehler C.8 Fehlerauswertung mittels GetLastError() C.9 Fehlerbehandlung über Exceptions in einem korrekten C# Code xii

13 1 Einführung An application should be considered unsafe until demonstrated to be otherwise. (Swiderski, 2004) Die Häufung von Veröffentlichungen kritischer Sicherheitslücken in Applikationen, Netzwerkdiensten und Betriebssystemen macht deutlich, dass ein Großteil der Applikationen und Computersysteme noch immer nicht sicher genug und ausreichend geschützt ist. Technische Detailinformationen über bestimmte Einbruchsmöglichkeiten in Computersysteme und die ausgenutzten Schwachstellen werden größtenteils online publiziert 1. Umfangreiche Beschreibungen der oftmals kreativen Methoden der Angreifer und der möglichen Abwehrmethoden sind jedem Interessierten frei zugänglich. Diese machen auch immer wieder deutlich, dass ein Großteil der Sicherheitsschwachstellen die Folge von Design- und Codierungsfehlern in einzelnen Teilen der Software ist. Ebenso fällt dabei auf, dass bestimmte Fehler besonders häufig als Grund für eine Sicherheitsschwachstelle genannt werden. Die Softwareindustrie wird vermehrt angehalten, fehlerfreie und sichere Software zu entwickeln. Der Druck auf die Softwareentwickler steigt. Trotz der bekannten Mängel 1 Im Internet werden fast täglich Nachrichten von kritischen Softwarefehlern und Sicherheitslücken veröffentlicht. Security Online Archive (z.b. SANS, CERT), einschlägige Mailinglisten, namhafte Unternehmen im Bereich Computer- und Netzwerksicherheit und News-Dienste (z.b. Heise Security, SecurityFocus, Computer Crime & Intellectual Property Section), selbst Hacker und Cracker liefern Informationen dazu größtenteils frei Haus. Eine Reihe weiterer Quellen vervollständigen diese Berichte und stellen Auswertungen über Trends, Statistiken und Top-10 Listen über mehr oder weniger erfolgreiche Attacken auf verwundbare Computersysteme zur Verfügung. Die Gesamtheit dieser Informationen ergibt einen aktuellen Lagebericht über IT-Sicherheit, sicherheitskritische Softwaremängel und deren Ursachen. Eine Liste ausgewählter Quellen findet sich im Anhang F am Ende dieses Dokuments. 1

14 1. Einführung 2 und deren technischer Ursachen scheinen sie derzeit aber kaum in der Lage, diesen Forderungen nachzukommen und Software herzustellen, die im Umfeld der globalen Vernetzung und Bedrohungen bestehen kann. 1.1 Global vernetzte Sicherheitsschwächen Die Firma Sun Microsystems 2 hat vor einigen Jahren schon in der Vision The Network is the Computer die hochgradige Vernetzung der Informationstechnologie und die damit einhergehenden technologischen Veränderungen vorhergesehen. Mittlerweile sind fast alle Computer über ein Netzwerk oder das weltumspannende Internet miteinander verbunden. Desktop-Computer, Server und Router, Pocket-Computer, mobile Telefone, Embedded Systems, Fernseher, Multimedia Systeme, jede Menge mikroprozessorgesteuerte Geräte und eine Unzahl von Peripheriegeräten sind Teile eines oder des globalen Netzwerks geworden. Dass sich durch diese Vernetzung auch das Bedrohungspotential durch mögliche Angriffe aus dem Netz (Remote Exploits) vervielfacht hat, wird dem Anwender und der Softwareindustrie aber erst heute immer mehr und oftmals schmerzlich bewusst. Mit der globalen Vernetzung verschiedenster Geräte und Systeme untereinander wächst auch der Druck, die Sicherheitsvorkehrungen bei Computersystemen und allen Systemteilen entsprechend anzupassen. Konnte früher noch von lokalen Bedrohungen und Angriffen (Local Exploits), von lokalen Sicherheitsschwachstellen und einem lokalen Risiko ausgegangen werden, so sind sowohl die Gefahrenpotentiale als auch die Angriffsziele mittlerweile im globalen Netz verteilt und somit auch die Auswirkungen globaler Natur. Einzelne Applikationen sind Teile eines vernetzten und komplexen Systems. Mit dem Internet verbundene Systeme stellen dabei ein besonders großes Risiko und manchmal auch einen besonderen Reiz für Angreifer dar. Das Internet ist eine feindselige Umgebung, deshalb muss der Programmcode so entworfen sein, dass er einem Angriff widerstehen kann. Vernetzte Systeme bedürfen also einer expliziten Sicherung gegen mögliche Angriffe. Jede potentielle Schwachstelle eines Systemglieds mindert die Sicherheit des gesamten Systems oder stellt sie gar in Frage. Ein einzelner Sicherheitsmangel einer Applikation kann 2

15 1. Einführung 3 schon für den Angriff des Gesamtsystems missbraucht werden. Ziel und Voraussetzung für ein sicheres Computersystem ist demnach die Sicherheit jeder einzelnen Komponente. Nur so kann die Sicherheit des Gesamtsystems gewährleistet werden und ein System den Attacken und Gefahren des Wild Wild Web [26, S. 5] standhalten. Die Entwicklung fehlerfreien Quellcodes ist längst nicht mehr genug, wenngleich eine der unabdingbaren Voraussetzung für sichere Software. 1.2 Stabile Software(un-)sicherheit Wenn von Sicherheitslücken in Computersystemen berichtet wird, handelt es sich fast immer um Fehler im Bereich der Softwareentwicklung, also Fehler im Programmcode. Fehler in der Hardware oder den angewandten Richtlinien, auch wenn darüber seltener berichtet wird, sind ebenfalls möglich und nicht minder gefährlich. Viele dieser oftmals lange unentdeckten Fehler stellen massive Sicherheitslücken dar. Sie bieten eine Angriffsfläche für mögliche Attacken gegen einzelne Applikationen, Computersysteme oder gesamte Netzwerke. Vor einigen Jahren galt es noch als ausreichend stabile Software zu entwickeln. Es genügte, wenn eine Applikation die Anforderungen der Endbenutzer erfüllte. Zusätzliche sicherheitsrelevante Forderungen wurden kaum erhoben. Softwareentwickler wurden angehalten soliden, stabilen, wartbaren und erweiterbaren Code zu schreiben. In dieser Zeit spielte Codesicherheit selbst in klassischen Standardwerken der Softwareentwicklung wie [35] und [36] kaum eine Rolle. Gute Software stellte sich dem Benutzer ausschließlich als stabil laufende Software dar. Dem Schutz vor mutwilligen Manipulationen wurde kaum Beachtung geschenkt. Mittlerweile wird vermehrt und ausdrücklich die Entwicklung sicherer Software gefordert. Langsam beginnen auch Softwareproduzenten und Benutzer ein allgemeines Sicherheitsbewusstsein zu entwickeln. Für eine sichere Software sind ein sicherer Code und ein sicheres Design die unabdingbaren Voraussetzungen. Sichere Software meint in diesem Zusammenhang, dass sowohl das Design als auch die Implementierung im Hinblick auf die Abwehr potentieller Gefahren und Attacken entworfen wurden. Auch wenn fehlerfreier Code nicht automatisch eine sichere Software garantiert, so gilt ein Gutteil

16 1. Einführung 4 der Aufmerksamkeit dem Ziel, fehlerfreien Code zu entwickeln. Mit welchen Methoden dieses Ziel letztlich erreicht werden kann, ist eine der zentralen Fragestellungen dieser Arbeit. 1.3 Motivation Software- bzw. Codesicherheit kann nicht ohne entsprechenden Einsatz und ohne spezielle Methoden schon während der Entwicklung und während des gesamten Lebenszyklus einer Applikation erreicht werden. Die Bedrohungsmodellierung (Threat Modeling) hilft Gefährdungspotentiale frühzeitig zu identifizieren, zu evaluieren, sie zu dokumentieren und Gegenmaßnahmen schon in der Designphase zu entwickeln. Der Entwicklungszyklus (Development Life Cycle) und der Sicherheitszyklus (Security Life Cycle) sind untrennbare Teile der Entwicklung einer Applikation. Sicherheitsprozesse umfassen die Spezifikationen, den Quelltext, die Dokumentation und den Test und sind Teil eines sicheren Software-Entwicklungszyklus. Software muss aktiv und explizit nach bestimmten Sicherheitskriterien entwickelt werden, um möglichen gezielten Angriffen standzuhalten. Die verwendeten Modelle, die Methoden und die Implementierungen werden stetig angepasst und nötigenfalls erweitert, um im veränderten Risikoumfeld zu bestehen und den ständig neuen Anforderungen zu entsprechen. Begleitende Maßnahmen während aller Entwicklungsphasen einer Applikation oder eines Softwaremoduls schaffen erst die Voraussetzungen für die Schaffung sicherer Softwaresysteme. Basierend auf den oben genannten Forderungen sind das Ziel und die Motivation dieser Arbeit die Untersuchung und die Diskussion potentieller Sicherheitsschwachstellen. Der Fokus richtet sich vorwiegend auf die Implementierung, die Methoden zur Lokalisierung von Codefehlern und die systematische Vermeidung von Schwachstellen in komplexen Softwaresystemen. Der folgende kurze Überblick beschreibt die einzelnen Kapitel der vorliegenden Arbeit.

17 1. Einführung Überblick Das folgende Kapitel 2 führt in ausgewählte technische Grundlagen der Softwareentwicklung ein und erklärt die zum Verständnis notwendigen Begriffe sowie das Speichermanagement einer Applikation. Nachdem ein Großteil der Systemsoftware nach wie vor in C/C++ programmiert ist, werden diese beiden Programmiersprachen auch bevorzugt in die Erklärungen einfließen. In Kapitel 3 werden potentielle Sicherheitsschwachstellen einer Software und darauf basierende Angriffsmethoden vorgestellt. Einige einfache Beispiele zeigen die praktische Umsetzung und Einfachheit eines Buffer Overflow Angriffs auf ungesicherte Software. Das Kapitel 4 untersucht ausgewählte Methoden der systematischen Lokalisierung potentieller Code- und Sicherheitsschwachstellen. Zur Anwendung kommen dabei quellcodebasierte und binärcodebasierte Analysemethoden. Nachdem die manuelle Prüfung von Code oft nicht effizient genug, sehr aufwändig und teuer ist, werden ebenso Werkzeuge zur automatischen Softwareanalyse geprüft. In Kapitel 5 steht die Vermeidung potentieller Schwachstellen im Vordergrund. Schwerpunkt ist dabei die Diskussion von Methoden zur Erstellung von sicheren Designs und zur Entwicklung sicherer Implementierungen. Das schon für die Designphase empfohlene Threat Modeling bleibt hier ebenso wenig unbehandelt wie die Anwendung der Prinzipien des defensiven Programmierens. In Kapitel 6 schließt ein kurzer Ausblick in die Zukunft die Arbeit ab. Darin wird erläutert, wie aus der Sicht von Experten die Sicherheit komplexer Softwaresysteme in Zukunft gewährleistet werden könnte. Die kurze Zusammenfassung schließt mit der Beantwortung der Frage ab, ob die aktuellen Methoden der Softwareentwicklung schon heute ausreichen würden, um die Sicherheit komplexer Softwaresysteme sicherzustellen oder ob erst in Zukunft eine echte Softwaresicherheit möglich sein wird.

18 2 Grundlagen Fast alle Sicherheitslücken basieren, wie aus den im Kapitel 1 angeführten Quellen hervorgeht, auf Programmfehlern und ein Großteil aller Angriffe basiert auf dem Prinzip der Speichermanipulation. Selbst wenn ein Programm im Normalbetrieb über längere Zeit stabil läuft, so bedeutet dies nicht zwingend, dass sich keine Fehler im zugrundeliegenden Programmcode befinden. Erst die Konfrontation eines Programms bzw. einer Funktion mit für den Regelbetrieb nicht vorhergesehenen Daten oder Situationen kann Fehler hervorrufen. Jeder einzelne Fehler kann sowohl die Applikation selbst als auch das Gesamtsystem in einen verwundbaren oder nicht geplanten Zustand versetzen. Sowohl Design- als auch Implementierungsfehler entstehen nicht zwingend, aber oft als Folge der Komplexität eines Quelltextes oder einer Softwarearchitektur. Bevor die technischen Grundlagen des Speichermanagements einer Applikation erklärt werden, wird der Begriff komplexe Softwaresysteme eingeführt. 2.1 Komplexe Softwaresysteme Die Definition eines komplexen Softwaresystems kann gerade aus der Sicht der Softwareentwicklung eindeutig festgelegt werden. Unter komplex kann jede Software bezeichnet werden, welche aufgrund ihres Umfangs nicht mehr ohne weiteres mit allen Funktionen, deren Wechselwirkungen und deren Auswirkungen auf das Gesamtsystem erfasst werden kann. 6

19 2. Grundlagen 7 Komplexe Applikationen neigen zu mehr und schwer zu entdeckenden Fehlern. Zeitgemäße und fortgeschrittene Entwicklungsmethoden versuchen der Komplexität durch Modularisierung und Aufteilung in überschaubare Funktionseinheiten entgegenzuwirken. Dass dieses Vorhaben nicht zwingend zum Erfolg führen muss, zeigt die Zahl der Veröffentlichungen (z.b. Bug Reports) und Fehlerkorrekturen (Bug Fixes) komplexer Software der letzten Jahre Speicherorganisation Dieses Kapitel führt einige Begriffe der Speicherverwaltung (Memory Management) ein. Es erklärt die Segmentierung des Speichers (Memory Segmentation) und deren Zweck. Diese Beschreibung zieht als Beispiel die Segmentierung und Speicherverwaltung einer 32 Bit Intel x86-architektur (IA-32)[28] heran. Das beschriebene Prinzip gilt jedoch ebenfalls für fast alle anderen gängigen Prozessorarchitekturen. Im folgenden Listing 2.1 wird ein kurzes C-Programm in Auszügen gezeigt. Es verwendet Variablen verschiedenster Typen und Speicherklassen. Dieses Programm weist eine Reihe von Fehlern auf, welche - wie sich im Laufe dieses Dokuments noch zeigen wird - ernste Sicherheitsschwachstellen darstellen. In den folgenden Erläuterungen wird wiederholt auf diesen Quellcode oder Teile davon Bezug genommen. 1 int _iglobalvalue; // Var im BSS Segment 2 static char _szglobalmsg[] = "text"; // Var im Data Segment 3 4 char* foo(const char *str1, const char* str2) 5 { 6 static int ilocal = 100; // Var im Data Segment 7 char szbuffer[20]; // Puffer auf Stack 8 strcpy( szbuffer, str1 ); // => Stack Overflow Schwachstelle return szbuffer; // Pointer auf Stackpuffer 11 } 1 Häufig wird z.b. bei größeren Service Packs von Betriebssystemen und Office Paketen die Anzahl der behobenen Fehler mit einigen Hundert angegeben. Microsoft veröffentlicht in einem monatlichen Updatezyklus Service Packs, Updates und Patches und beziffert die Anzahl der kritischen und zusätzlich geschlossenen Sicherheitslücken im Schnitt mit etwa 20 Fehlern pro Monat. Siehe dazu auch

20 2. Grundlagen int main(int argc, char *argv[]) 14 { 15 static short ilen; // Var im BSS Segment 16 char* pbuff1, pbuff2; // Vars auf Stack ilen = strlen( argv[1] ); // => Integer Overflow Schwachst. 19 pbuff1 = (char*)malloc( ilen ); // Allokiert Puffer auf Heap 20 for( int i=0; i <= ilen; i++ ) 21 pbuff1[i] = argv[1][i]; // Heap und Off-By-One Overflow 22 strcpy( pbuff2, argv[2]); // => unsichere Funktion strcpy() 23 // => uninitial. Zeiger pbuff2 24 printf( pbuff1 ); // Format String Schwachstelle 25 // => unsichere Funktion printf() 26 free( pbuff1 ); // Freigabe des Pufferspeichers 27 pbuff2 = foo(argv[1]); // => Illegaler Zeiger in pbuff2 28 free( pbuff1 ); // => Double Free Fehler 29 return 0; 30 } Listing 2.1: Programm mit Variablen verschiedener Speicherklassen Prozessspeicher Ein Computerprogramm ist im klassischen Fall eine ausführbare Datei 2 (Executable), welche auf einem Datenträger gespeichert ist. Dabei kann es sich zum Beispiel, wie unter Linux und nahezu allen Unix-Derivaten verwendet, um Dateien im Executeable and Linking Format (ELF) handeln [14]. Microsoft Windows Plattformen verwenden dazu Dateien im sogenannten Portable Executable Format (PE Format) [16]. Diese Dateien beinhalten nicht nur den ausführbaren Programmcode und dessen statische Daten, sondern beschreiben die Objektdatei. Sie speichern ebenso zusätzliche Informationen zum Starten der Applikation und zum Verwalten des Speichers. Wird nun ein Programm gestartet, so werden, entsprechend der codierten Informationen im Optional Header 3, 2 Ausführbare Scriptdateien, wie sie z.b. unter Unix-basierten Systemen häufig vorkommen, sind von diesen Betrachtungen ausgenommen. Diese können nicht direkt ausgeführt werden, sondern benötigen ein zusätzliches Programm (Interpreter), welches die einzelnen Script Statements interpretiert und zur Ausführung bringt. 3 Diese Bezeichnung ist eigentlich irreführend, da dieser Header nicht optional ist und unbedingt notwendige Informationen zur Größe des beim Start benötigten Speichers beinhaltet.

21 2. Grundlagen 9 Teile dieser Objektdatei vom Program Loader in den Hauptspeicher geladen, der Speicher entsprechend konfiguriert und der Programmcode zur Ausführung gebracht. Der Start im Speicher erfolgt durch den Aufruf einer speziellen Funktion (Startup-Routine) an einer bestimmten Adresse (Einsprungadresse). Im Listing 2.1 ist dieser Einsprungpunkt (Entry Point) die Funktion main. Ein laufendes Programm wird als Prozess bezeichnet [23]. In modernen Betriebssystemen wird jedem laufenden Prozess ein virtueller Adressraum zur Verfügung gestellt, welcher von der Memory Management Unit (MMU) in physische Speicheradressen umgesetzt wird. Einem Prozess stehen nun separat organisierte Speicherregionen bzw. Speichersegmente (Memory Segments) innerhalb seines Adressbereichs zur Verfügung, in denen sich sein Programmcode und statische Daten befinden und auch temporäre Daten abgelegt werden können. Typische Segmente innerhalb des Prozessspeichers sind das Text-, Data- und BSS-Segment sowie der Stack und der Heap einer Applikation (siehe Abbildung 2.1). In den folgenden Abschnitten werden diese Begriffe bzw. Speicherbereiche detailliert beschrieben [31] Text-Segment Im Text-Segment bzw. Code-Segment werden die maschinenlesbaren Instruktionen, also jener Programmcode, welchen die Central Processing Unit (CPU) ausführt, abgelegt. Dieses Segment ist als read-only markiert, das heißt, es kann nur lesend darauf zugegriffen werden. Damit kann der ausführbare Code des Prozesses weder versehentlich noch mutwillig modifiziert werden. Jeder Versuch, den Speicher in diesem Segment zu manipulieren, würde sofort zu einer entsprechenden Ausnahmebehandlung (Exception) und zu einem Programmabbruch führen Data-Segment Im Data-Segment werden nur bestimmte Daten des Prozesses, jedoch kein ausführbarer Code abgelegt. Das Data-Segment hat eine feste, beim Programmstart zugewiesene Größe und nimmt alle vor dem eigentlichen Programmstart initialisierten globalen Variablen (z.b. primitive Variablen, Arrays, Puffer, Strukturen, Zeiger, Objektdaten) auf.

22 2. Grundlagen 10 Das Data-Segment kann während der Programmausführung gelesen und beschrieben werden, um den Inhalt der dort gespeicherten Variablen während der Laufzeit ändern zu können. 0xC hohe Adresswerte Stack dynamisches Wachstum vorhergehende Stack Frames Verfügbarer Speicher Heap BSS Data dynamisches Wachstum Function Stack Frame Funktionsparameter Funktion Return Address. gesicherter Frame Pointer Lokal deklarierte Variablen und Puffer optionale Prozessdaten niedrige Adresswerte 0x Text Abbildung 2.1: Typischer Prozessspeicher- und Stackaufbau einer C/C++ Applikation Der BSS-Bereich 4 ist ein Unterbereich des Data-Segments. Er nimmt nicht-initialisierte globale und nicht-initialisierte statische Variablen auf (siehe Listing 2.1 die Variable _iglobalvalue in Zeile 1 und die lokale statische Variable ilen in Zeile 15), wohingegen alle initialisierten globalen und statischen Variablen außerhalb des BSS-Bereichs abgelegt werden (siehe Listing 2.1, Zeile 2 und 6 ). Wird das Programm gestartet, wird der BSS-Bereich in der Regel noch vor dem eigentlichen Programmstart durch das Betriebssystem mit Nullen gefüllt. Numerische Werte erhalten dadurch also alle den Wert 0, Strings sind den Konventionen der Programmiersprache C und C++ 5 entsprechend immer mit dem Zeichen \0 (ASCII 0) abgeschlossen und haben damit auch die Länge 4 BSS steht als Abkürzung für Block Started by Symbol 5 Ein Großteil der Betriebssysteme und Systemprogramme ist in der Programmiersprache C/C++ implementiert. In diesen Sprachen ist eine Zeichenkette (String) per Definition eine Folge von Zeichen (ASCII-Zeichen) in einem char-array, welche immer mit einem ASCII 0 (0 Byte, welches nur 0-Bits enthält) abgeschlossen sein muss. A string is a contiguous sequence of characters terminated by and including the first null character. [...] A pointer to a string is a pointer to its initial (lowest addressed) character. The length of a string is the number of bytes preceding the null character and the value of a string is the sequence of the values of the contained characters, in order. [11, S. 164] Explizite Längenangaben werden also nicht gespeichert. Würde das 0-Byte als Ende-Zeichen fehlen, würden String-verarbeitende Funktionen diese Zeichenkette als so lange interpretieren, bis zufällig ein 0-Byte im Speicher vorkommt.

23 2. Grundlagen 11 0 [11]. So wird sichergestellt, dass sich keine unerwünschten Werte in den uninitialisierten Variablen befinden, vor allem aber auch keine Daten eines vorangegangenen und wieder terminierten Prozesses, der diesen Speicherbereich zuvor verwendet bzw. mit eigenen Daten beschrieben hat Heap Jeder Prozess hat die Möglichkeit, erst während der Programmausführung Speicher vom Betriebssystem anzufordern. Dafür werden eigene Bibliotheksfunktionen (Memory Management Functions) zur Verfügung gestellt, die den verfügbaren und belegten Speicher verwalten. Ein Prozess kann einen Speicher anfordern und erhält dabei einen Zeiger auf diesen Speicher (z.b. über malloc(), siehe Listing 2.1, Zeile 19). Benötigt er den Speicher nicht mehr, kann er diesen Speicher jederzeit freigeben (zum Beispiel mit free(), siehe Listing 2.1, Zeile 26). Nachdem weder der Zeitpunkt der Speicherallokation noch die Größe des Speichers vorgegeben ist, wird von einer dynamischen Speicherverwaltung bzw. einer Dynamic Memory Allocation gesprochen. Alle dynamisch angeforderten Speicherblöcke befinden sich innerhalb eines speziell dafür vorgesehenen, dynamisch wachsenden Speicherbereichs, dem sogenannten Heap des Programms. Die Größe des Heaps wird durch den verfügbaren Speicher abzüglich der Größe des Stacks limitiert (siehe Abbildung 2.1). Ein Prozess kann maximal soviel Speicher benutzen, wie diesem von der Speicherverwaltung auf Abruf zur Verfügung gestellt wird. Die Lage der Speicherblöcke ist vom laufenden Prozess nicht beeinflussbar und wird von der Speicherverwaltung des Betriebssystems bestimmt. Mehrmalige Speicheranforderungen und Freigaben führen aufgrund der internen Organisation der belegten und freien Speicherbereiche zu einer Fragmentierung (Memory Fragmentation) des Speichers. Auf dem Heap allokierter Speicher ist solange gültig, bis er wieder freigegeben wird oder der Prozess beendet wird. Moderne Betriebssysteme geben den gesamten Heap einer Applikation nach dessen Terminierung automatisch wieder frei, um den Speicher anderen Applikationen zur Verfügung stellen zu können.

24 2. Grundlagen Stack Der Stack wächst dynamisch und teilt sich gemeinsam mit dem Heap den einer Applikation zur Verfügung stehenden freien Speicher. Der Stack wächst, im Gegensatz zum Heap, von hohen Speicheradressen in Richtung niedrigere Speicheradressen (siehe Abbildung 2.1). Jede aufgerufene Funktion erzeugt im Stack-Bereich einen eigenen Speicherblock, genannt Stack Frame, welcher von der höchsten Adresse beginnend nach und nach den Stack befüllt. Auf dem Stack eines Prozessors einer Intel x86 Architektur können folgende Daten innerhalb eines einzigen Stackframes abgelegt werden [8]: Funktionsparameter - Alle beim Aufruf einer Funktion übergebenen Parameter liegen auf dem Stack. Innerhalb der Funktion entspricht ein übergebener Parameter einer lokalen Variablen. Funktionsrücksprungadresse - Unmittelbar vor Beendigung einer Funktion wird der Rückgabewert der Funktion in einem Register des Prozessors oder auf dem Stack abgelegt und zur aufrufenden Funktion bzw. zur Funktionsrücksprungadresse (Function Return Address) zurückgekehrt. Auf dieser Adresse liegt eines der Hauptaugenmerke beim Versuch einer Attacke. Gelingt es einem Angreifer diese Adresse zu manipulieren, kann er den Programmfluss gezielt beeinflussen. Frame Pointer - Der aus Effizienzgründen auf dem Stack gesicherte Frame Pointer enthält die Basisadresse des aktuellen Stack Frames. Er dient dem effizienten Zugriff auf die auf dem Stack gesicherten Variablen, indem jede Variable mit diesem Pointer und einem bestimmten Offset adressiert werden kann. Lokale Variablen - Alle lokal deklarierten auto-variablen werden auf dem Stack abgelegt. Im Gegensatz dazu werden lokale statische Variablen, welche ihren Wert auch nach dem Verlassen der Funktion behalten müssen, entweder im allgemeinen Datensegment oder im BSS-Bereich abgelegt. Optionale Prozessdaten und Zeiger - Je nach Architektur und Compiler können noch weitere Daten auf dem Stack abgelegt werden, z.b. eine Adresse zur Ausnahmebehandlung (Exception Handler Frame), zwischengespeicherte Register des Prozessors (Callee Save Registers).

25 2. Grundlagen 13 Im Gegensatz zu Speicherblöcken auf dem Heap hat ein Stack Frame immer eine begrenzte Lebensdauer und limitierte Größe. Im Beispiel aus Listing 2.1 werden alle lokalen auto-variablen (siehe Listing 2.1, Zeilen 16 und 7) und Verwaltungsdaten (Funktionsrücksprungadresse) auf dem Stack gespeichert. Wird die Funktion verlassen, werden auch die aktuellen Stack Frames wieder vom Stack entfernt. Die Zugriffsorganisation erfolgt ähnlich einem Stapel, denn die Daten werden immer in umgekehrter Reihenfolge gelesen, als sie zuvor auf dem Stack geschrieben wurden (LIFO-Prinzip - Last In/First Out). Der letzte auf dem Stack abgelegte Stack Frame bestimmt immer die aktuelle Größe des Stacks. Eine Fragmentierung des Stacks aufgrund der LIFO-Organisation ist nicht zu befürchten. 2.3 Register Ein Prozessor besitzt nur einen sehr kleinen, jedoch sehr schnellen internen Speicher zur Abarbeitung eines Programms. Ein Teil dieses Speichers wird für interne Zwecke verwendet und ist von Außen bzw. für Programme nicht zugänglich. Ein anderer kleiner Teil dieser Speicherplätze wird für Ein- und Ausgabeoperationen, das Verschieben und Manipulieren von Speicher, zur Übergabe bestimmter Parameter, zur Adressierung und Indizierung von Speicher, zur Rückgabe von Ergebnissen und für Zähler verwendet. Dieser Teil der Speicherplätze wird im Allgemeinen als Register bezeichnet. Die für eine Applikation verfügbaren Register werden als General Purpose Registers (GPR) bezeichnet, welche in allen Architekturen in ähnlicher Form zur Verfügung stehen. Intel unterteilt in Intels 32-bit Architecture (IA-32) die Register je nach Verwendung in die Gruppen General Data Registers, General Address Registers, Floating Point Stack Registers, in Register für spezielle Verwendungen (z.b. Multimedia) und Flags, Counter und Pointer zur Kontrolle des Programmflusses (Instruction Pointer, Interrupt Control, Paging, Mode Switching, uvm.). Weitere Details zur hier als Beispiel angeführten IA-32 Architektur sind [28] zu entnehmen. Jeder Prozessor und jede Prozessorarchitektur hat spezielle Register, um mit dem Programm zu kommunizieren oder den Programmfluss zu steuern. Moderne Prozessoren haben in der Regel einen größeren und schnelleren internen Speicher und können

26 2. Grundlagen 14 oft mehrere Speicherplätze in kürzester Zeit oder parallel bearbeiten. Sie bieten eine größere Registerbreite (Bits pro Register) und können dadurch mehr Speicher direkt adressieren. Die Anzahl und Art der Register ist höchst unterschiedlich, alle modernen Prozessoren bieten mittlerweile aber Segment, Control, Debug und Test Register zur Steuerung des Prozessors. Gemeinsam haben fast alle Prozessoren auch, dass jede Manipulation eines Registers eine unerwartete und unbeabsichtigte, für Angreifer vielleicht beabsichtigte, Auswirkung auf das Programm oder den Programmfluss haben kann. Die für einen Angriff wohl wichtigsten Register sind das ESP (Stack Pointer), das EBP (Extended Base Pointer) und das EIP (Instruction Pointer) Register. 2.4 Daten und Funktionszeiger Ein Pointer ist die Bezeichnung für einen Zeiger auf eine Speicheradresse. Man unterscheidet dabei zwischen Zeigern auf Daten (Data Pointer) und Zeigern auf Funktionen (Function Pointer). Ein Zeiger zeigt immer an den Beginn eines Speicherbereichs. Über den Zeiger selbst, welcher ausschließlich nur die Adresse darstellt, kann keinerlei Aussage über die Größe des Speicherblocks, die an dieser Adresse abgelegten Daten und deren Datentypen getroffen werden. Über die Lage des Speicherblocks kann maximal auf die grundsätzliche Verwendung - Daten oder Programmcode - geschlossen werden.[47] Datenzeiger (Data Pointer) Funktionszeiger (Function Pointer) Normale Variable int ivalue; Wert Pointer Variable int (*pffoo)(); Adresse pffoo(); Pointer Variable int* pvalue; Adresse *pvalue = ivalue; Wert int foo() {... } Abbildung 2.2: Daten- und Funktionszeiger Innerhalb eines Programms wird häufig über Zeigervariablen auf Daten oder Funktionen zugegriffen (siehe Abbildung 2.2). Programmiersprachen wie C und C++ stellen

27 2. Grundlagen 15 dafür eigene Pointertypen zur Verfügung, die einen einfachen Zugriff auf Speicher und eine einfache Zeigermanipulation (Zeigerarithmetik) ermöglichen. In den Programmiersprachen C und C++ repräsentiert schon ein Funktionsname den Zeiger auf die Funktion, also jene Speicheradresse, an der der Funktionscode beginnt. Erst die Klammerung nach dem Funktionsnamen lässt den Compiler erkennen, dass es sich um einen Aufruf der Funktion an dieser Adresse mit den angegebenen Parametern handelt. Zeigervariablen können sich prinzipiell in jedem Speicherbereich befinden, je nachdem welcher Speicherklasse sie zugeordnet werden. Typische auf dem Stack abgelegte Pointer sind beispielsweise die als Argumente einer Funktion übergebenen Zeiger, lokale Zeigervariablen der Speicherklasse auto innerhalb einer Funktion, Rücksprungadressen, Adressen auf Exception Handler und gesicherte Frame Pointer. In C++ geschriebene Programme speichern für deren Objektinstanzen während der Laufzeit auch Tabellen mit Zeigern auf Funktionen (Vector Tables oder VTables), um virtuelle Methoden abzubilden. Zeiger innerhalb des Prozesspeichers stellen bei allen Attacken das Hauptangriffsziel dar. Können Zeiger oder ganze Zeigertabellen von Außen manipuliert werden, können damit andere Daten, als ursprünglich vorgesehen, gelesen oder gespeichert werden. Bei manipulierten Funktionszeigern werden nicht vorgesehene Funktionen aufgerufen und damit der Programmfluss gezielt verändert. Ebenso ist es denkbar, Zeiger auf Dateien zu manipulieren und damit externe Dateien in einen laufenden Prozess einzuschleusen. Auch Handles 6 auf Dateien sind letztendlich nur Zeiger. 6 Als Handle wird in der Softwareentwicklung ein Identifikator, Nickname oder Alias auf digitale Objekte wie z.b. Dateien, Prozesse, Ressourcen, angeschlossene Geräte, usw. bezeichnet. Das Betriebssystem vergibt ein systemweit eindeutiges Handle beim Erzeugen eines Objekts oder dem Aufbau einer Verbindung mit einem Objekt. Im Programm werden diese Objekte dann nur noch über dieses Handle angesprochen.

28 3 Potentielle Sicherheitsschwachstellen Unter einer potentiellen Sicherheitsschwachstelle (Security Vulnerability) versteht man eine Systemschwäche, welche einen Einbruch in das System zumindest theoretisch möglich macht. Eine Schwachstelle ist immer die Folge eines Fehlers im Code (Coding Bug) oder eines Fehlers im Design (Design Flaw). Ein Bug ist ein Fehler in der Implementierung, z.b. eine fehlerhafte Stringbehandlung oder ein fehlerhafter Zeiger innerhalb einer Funktion. Das Design einer Software kann keine Bugs haben, weil es sich dabei nicht um Codierungsfehler handelt. Ein Flaw ist auf der Ebene des Designs, der Planung und der Architektur einer Software zu suchen. Die folgenden Abschnitte dieses Kapitels beschreiben einige der typischen Fehler, welche für einen Großteil der Sicherheitsschwachstellen verantwortlich sind. Allen voran Designfehler und die sogenannten Pufferüberläufe. 3.1 Designfehler A flaw is instantiated in software code but is also present (or absent!) at the design level. schreiben Hoglund und McGraw in [24, S. 39]. Ein Designfehler kann also im Quelltext einer Software zu finden sein. Oft aber sind designbasierte Sicherheitsschwachstellen die Folge von fehlenden Codeteilen oder einer unzureichenden Implementierung notwendiger Sicherungs- und Verteidigungsmechanismen. Die folgende 16

29 3. Potentielle Schwachstellen 17 Auflistung sicherheitsrelevanter Designfehler lässt schnell erkennen, welche fehlerhaften oder fehlenden Funktionen die typischen Designfehler heutiger Software sein können: Eingabe- und Parameterprüfung: Buffer Overflows, Parametermanipulation, SQL Injection und Cross-Site Scripting (XSS) basieren auf ungeprüften Benutzereingaben oder Funktionsparametern. Nur die strikte Überprüfung aller Eingangsdaten kann Manipulationen verhindern. Authentisierung und Authentifizierung: Das erste zweier Subjekte (z.b. Benutzer, Prozesse, Services, Clients) muss einen Nachweis seiner Identität erbringen, sich authentisieren. Das zweite Subjekt als sein Gegenüber muss die Identität seines Gegenübers überprüfen, die Identität seines Partners authentifizieren. Verschlüsselung: Unverschlüsselte Daten sind für jedermann lesbar. Eine Verschlüsselung der Daten lässt nur jenen die Informationen zukommen, für die sie auch gedacht sind. Sicherung: Ungesicherte Daten sind manipulierbar. Codierungsverfahren können Daten vor Manipulationen sichern oder jede Manipulation aufdecken (z.b. Checksumme, Signatur). Zugriffs- und Ausführungsberechtigungen: Berechtigungsstrategien legen fest, was ein Benutzer oder Prozess darf oder nicht darf (z.b. Zugriff auf Dateien, Ressourcen, Starten von Prozessen). Anwendungs- und Systemkonfiguration: Konfigurationsdateien unterliegen einer strengen Kontrolle (Zugriffs- und Manipulationsschutz). Fehlerbehandlung und Logging: Falsche Fehlerbehandlungen verraten oft interne Systeminformationen. Logdateien, Speicherauszüge und Stacktraces sollten nicht sichtbar sein oder mit einer entsprechenden Zugriffsberechtigung versehen werden. Designfehler lassen sich im Allgemeinen nicht durch die Prüfung einzelner Codezeilen erkennen. Was für eine einfache Applikation an Daten- und Codesicherung noch ausreichend sein mag, ist für eine sicherheitskritische Anwendung bei weitem nicht genug. Erst eine Klassifizierung der Sicherheitsanforderungen, das Erkennen der Bedrohungsszenarien, das Zusammenwirken einzelner Module und die Identifikation der

30 3. Potentielle Schwachstellen 18 Datenströme lässt mögliche Designfehler und darauf basierende Sicherheitsschwachstellen sichtbar werden. 3.2 Overflow Fehler Die in den letzten Jahrzehnten weitaus am häufigsten zum Einbruch in ein Computersystem genutzten Programmfehler stellen so genannte Pufferüberläufe (Buffer Overflows oder Buffer Overruns) dar. Sie treten immer dann auf, wenn ein Programm bzw. eine Funktion Daten in einem Speicher bestimmter Länge verarbeitet und dabei die Grenzen eines Puffers (Memory Buffer) schreibend über- oder unterschreitet. Dabei werden angrenzende, sich ebenfalls im Speicher befindliche Daten oder Zeiger auf Daten und Funktionen überschrieben, welche funktions- und ablaufrelevant sind. Besonders häufig treten diese Fehler bei C- und C++-Programmen auf, da hier seitens der Sprachkonzepte und Compiler keine Überprüfungen der Speicher- und Arraygrenzen erfolgen. Für die Vermeidung eines Buffer Overflows ist letztendlich immer der Programmierer zuständig. Moderne Programmiersprachen unterstützen die Entwickler, indem sie Array- und Speichergrenzen verwalten und Zugriffe auf illegale Speicherbereiche unterbinden. Die Überprüfung aller Speicherzugriffe und Speichergrenzen hat natürlich Performanceeinbußen zur Folge. Overflows können durch einen Fehler scheinbar zufällig auftreten oder - bei Attacken - absichtlich provoziert werden. In allen Fällen ist ein Programmfehler die Voraussetzung für einen Überlauf. Das Problem kann über längere Zeit unentdeckt bleiben, wenn das Programm keine sichtbaren Veränderungen im weiteren Ablauf zeigt. Ein Angreifer, der derartige Sicherheitsschwachstellen (Security Vulnerabilities) ausnutzen möchte, provoziert einen Overflow, um Daten bzw. Code in das System zu injizieren (Data Injection oder Code Injection). Dabei versorgt er das Programm gezielt mit Daten, die außerhalb der Spezifikationen liegen. Werden diese Eingangsdaten keiner expliziten Prüfung unterzogen, kann es zu einem Pufferüberlauf kommen und im Speicher befinden sich gezielt injizierte Daten. Mitunter ist der weitere Prozessablauf durch diese Daten gesteuert und im schlechtesten Fall durch einen Angreifer gezielt beeinflusst.

31 3. Potentielle Schwachstellen 19 Wie Hoglund et al. in [24] schreiben, erlauben unterschiedliche Programmfehler auch unterschiedliche Methoden um ein System anzugreifen. Related programming errors give rise to simular exploit techniques. [24, S. 38] Im Folgenden werden einige ausgewählte Überlauffehler und die darauf basierenden Angriffsmethoden vorgestellt Stack Overflow Der Stack ist, wie im Abschnitt beschrieben, ein Speicherbereich, in dem lokale Variablen, Sprungadressen und Funktionsparameter kurzfristig abgelegt werden. In IA-32 Architekturen wächst, wie bei vielen anderen Prozessorarchitekturen auch, der Stack von höheren zu niedrigeren Speicheradressen. Wird nun ein Puffer auf dem Stack angelegt und kommt es bei einem Schreibvorgang zu einem Überschreiten der Puffergrenzen, so werden an den Puffer angrenzende Speicherstellen auf dem Stack überschrieben Der klassische Stack Overflow Der klassische stack-basierte Buffer Overflow oder, in Form einer Attacke provoziert, auch Stack Smashing Attack genannt [1], wird als Overflow der 1.Generation 1 bezeichnet [21], weil dieser Overflow wohl zu den am längsten bekannten Schwachstellen gehört. Bei einem klassischen Stack Overflow Exploit ist das Ziel meist die Manipulation der Function Return Address, also der Rücksprungadresse zur aufrufenden Funktion. Kann dieser Zeiger gezielt manipuliert werden, kann eine eigene eingeschleuste Funktion oder eine Bibliotheksfunktion aufgerufen werden. Ein kurzes Beispiel soll die Vorgänge auf dem Stack bei einem Funktionsaufruf und einem Stack Overflow verdeutlichen. In dem im Listing 3.1 gezeigten Beispielprogramm wird aus der Funktion main() die Funktion foo() aufgerufen. Die Applikation ist syntaktisch korrekt und ausführbar, obwohl die Funktion foo einige Fehler bzw. Schwachstellen aufweist, welche für einen Angriff missbraucht werden könnten. Die unsichere 1 Halvar teilt in [21] die verschiedenen Exploit-Techniken erstmals in Generationen ein. Er klassifiziert damit die Arten der Buffer Overflow Schwachstellen anhand der zeitlichen Abfolge, in der diese veröffentlicht wurden. Darauf basierend erweitert Klein in [31] diese Einteilung und weist die Overflows jeweils einer bestimmten Generation zu.

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER Inhalt 1 Einleitung... 1 2 Einrichtung der Aufgabe für die automatische Sicherung... 2 2.1 Die Aufgabenplanung... 2 2.2 Der erste Testlauf... 9 3 Problembehebung...

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen Open Source professionell einsetzen 1 Mein Background Ich bin überzeugt von Open Source. Ich verwende fast nur Open Source privat und beruflich. Ich arbeite seit mehr als 10 Jahren mit Linux und Open Source.

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg. Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr

Datensicherheit. Vorlesung 7: 29.5.2015. Sommersemester 2015 h_da. Heiko Weber, Lehrbeauftragter

Datensicherheit. Vorlesung 7: 29.5.2015. Sommersemester 2015 h_da. Heiko Weber, Lehrbeauftragter Datensicherheit Vorlesung 7: 29.5.2015 Sommersemester 2015 h_da Heiko Weber, Lehrbeauftragter Inhalt 1. Einführung & Grundlagen der Datensicherheit 2. Identitäten / Authentifizierung / Passwörter 3. Kryptografie

Mehr

Formular»Fragenkatalog BIM-Server«

Formular»Fragenkatalog BIM-Server« Formular»Fragenkatalog BIM-Server«Um Ihnen so schnell wie möglich zu helfen, benötigen wir Ihre Mithilfe. Nur Sie vor Ort kennen Ihr Problem, und Ihre Installationsumgebung. Bitte füllen Sie dieses Dokument

Mehr

SDD System Design Document

SDD System Design Document SDD Software Konstruktion WS01/02 Gruppe 4 1. Einleitung Das vorliegende Dokument richtet sich vor allem an die Entwickler, aber auch an den Kunden, der das enstehende System verwenden wird. Es soll einen

Mehr

ICS-Addin. Benutzerhandbuch. Version: 1.0

ICS-Addin. Benutzerhandbuch. Version: 1.0 ICS-Addin Benutzerhandbuch Version: 1.0 SecureGUARD GmbH, 2011 Inhalt: 1. Was ist ICS?... 3 2. ICS-Addin im Dashboard... 3 3. ICS einrichten... 4 4. ICS deaktivieren... 5 5. Adapter-Details am Server speichern...

Mehr

Schwachstellenanalyse 2012

Schwachstellenanalyse 2012 Schwachstellenanalyse 2012 Sicherheitslücken und Schwachstellen in Onlineshops Andre C. Faßbender Schwachstellenforschung Faßbender 13.01.2012 Inhaltsverzeichnis 1. Abstract... 3 2. Konfiguration der getesteten

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse:

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse: Informationssystemanalyse Problemstellung 2 1 Problemstellung Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse: große Software-Systeme werden im Schnitt ein Jahr zu spät

Mehr

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008 Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen

Mehr

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1): Supportanfrage ESN Bitte füllen Sie zu jeder Supportanfrage diese Vorlage aus. Sie helfen uns damit, Ihre Anfrage kompetent und schnell beantworten zu können. Verwenden Sie für jedes einzelne Thema jeweils

Mehr

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung The ToolChain Grafisches Debugging mit der QtCreator Entwicklungsumgebung geschrieben von Gregor Rebel 2014-2015 Hintergrund Neben dem textuellen Debuggen in der Textkonsole bieten moderene Entwicklungsumgebungen

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

Installation SQL- Server 2012 Single Node

Installation SQL- Server 2012 Single Node Installation SQL- Server 2012 Single Node Dies ist eine Installationsanleitung für den neuen SQL Server 2012. Es beschreibt eine Single Node Installation auf einem virtuellen Windows Server 2008 R2 mit

Mehr

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten Der Konfigurations-Assistent wurde entwickelt, um die unterschiedlichen ANTLOG-Anwendungen auf den verschiedensten Umgebungen automatisiert

Mehr

OP-LOG www.op-log.de

OP-LOG www.op-log.de Verwendung von Microsoft SQL Server, Seite 1/18 OP-LOG www.op-log.de Anleitung: Verwendung von Microsoft SQL Server 2005 Stand Mai 2010 1 Ich-lese-keine-Anleitungen 'Verwendung von Microsoft SQL Server

Mehr

Analyse zum Thema: Laufzeit von Support-Leistungen für ausgewählte Server OS

Analyse zum Thema: Laufzeit von Support-Leistungen für ausgewählte Server OS Analyse zum Thema: Laufzeit von Support-Leistungen für Axel Oppermann Advisor phone: +49 561 506975-24 mobile: +49 151 223 223 00 axel.oppermann@experton-group.com Januar 2010 Inhalt Summary und Key Findings

Mehr

ISA Server 2004 - Best Practice Analyzer

ISA Server 2004 - Best Practice Analyzer ISA Server 2004 - Best Practice Analyzer Die Informationen in diesem Artikel beziehen sich auf: Microsoft ISA Server 2004 Seit dem 08.12.2005 steht der Microsoft ISA Server 2004 Best Practice Analyzer

Mehr

! " # $ " % & Nicki Wruck worldwidewruck 08.02.2006

!  # $  % & Nicki Wruck worldwidewruck 08.02.2006 !"# $ " %& Nicki Wruck worldwidewruck 08.02.2006 Wer kennt die Problematik nicht? Die.pst Datei von Outlook wird unübersichtlich groß, das Starten und Beenden dauert immer länger. Hat man dann noch die.pst

Mehr

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost

Adobe Photoshop. Lightroom 5 für Einsteiger Bilder verwalten und entwickeln. Sam Jost Adobe Photoshop Lightroom 5 für Einsteiger Bilder verwalten und entwickeln Sam Jost Kapitel 2 Der erste Start 2.1 Mitmachen beim Lesen....................... 22 2.2 Für Apple-Anwender.........................

Mehr

VB.net Programmierung und Beispielprogramm für GSV

VB.net Programmierung und Beispielprogramm für GSV VB.net Programmierung und Beispielprogramm für GSV Dokumentation Stand vom 26.05.2011 Tel +49 (0)3302 78620 60, Fax +49 (0)3302 78620 69, info@me-systeme.de, www.me-systeme.de 1 Inhaltsverzeichnis Vorwort...2

Mehr

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage .htaccess HOWTO zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage Stand: 21.06.2015 Inhaltsverzeichnis 1. Vorwort...3 2. Verwendung...4 2.1 Allgemeines...4 2.1 Das Aussehen der.htaccess

Mehr

GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT

GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT Seite 1/7 GEZIELT MEHR SICHERHEIT MIT 4I ACCESS SERVER & 4I CONNECT CLIENT ZENTRAL LOKALE MANAGEMENT-PLATTFORM FÜR EINE W ELTWEIT SICHERE INDUSTRIELLE KOMMUNIKATION. Seite 2/7 Auf den folgenden Seiten

Mehr

Anforderungen an die HIS

Anforderungen an die HIS Anforderungen an die HIS Zusammengefasst aus den auf IBM Software basierenden Identity Management Projekten in NRW Michael Uebel uebel@de.ibm.com Anforderung 1 IBM Software Group / Tivoli Ein Feld zum

Mehr

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung Anleitung zur Daten zur Datensicherung und Datenrücksicherung Datensicherung Es gibt drei Möglichkeiten der Datensicherung. Zwei davon sind in Ges eingebaut, die dritte ist eine manuelle Möglichkeit. In

Mehr

Research Note zum Thema: Laufzeit von Support-Leistungen für Server OS

Research Note zum Thema: Laufzeit von Support-Leistungen für Server OS Research Note zum Thema: Laufzeit von Support-Leistungen für Axel Oppermann Advisor phone: +49 561 506975-24 mobile: +49 151 223 223 00 axel.oppermann@experton-group.com November 2009 Inhalt 1 EINFÜHRUNG

Mehr

Speicher in der Cloud

Speicher in der Cloud Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG

Mehr

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele: 2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Configuring Terminal Services o Configure Windows Server 2008 Terminal Services RemoteApp (TS RemoteApp) o Configure Terminal Services Gateway

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Robot Karol für Delphi

Robot Karol für Delphi Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško

Mehr

Task: Nmap Skripte ausführen

Task: Nmap Skripte ausführen Task: Nmap Skripte ausführen Inhalt Einfache Netzwerkscans mit NSE Ausführen des Scans Anpassung der Parameter Einleitung Copyright 2009-2015 Greenbone Networks GmbH Herkunft und aktuellste Version dieses

Mehr

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08 Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements von Stephanie Wilke am 14.08.08 Überblick Einleitung Was ist ITIL? Gegenüberstellung der Prozesse Neuer

Mehr

Verarbeitung der Eingangsmeldungen in einem Callcenter

Verarbeitung der Eingangsmeldungen in einem Callcenter Q-up ist ein Produkt der: Anwendungsbeispiele Verarbeitung der Eingangsmeldungen in einem Callcenter Der Testdatengenerator Der Testdatengenerator Verarbeitung der Eingangsmeldungen in einem Callcenter

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen

SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen SafeRun-Modus: Die Sichere Umgebung für die Ausführung von Programmen Um die maximale Sicherheit für das Betriebssystem und Ihre persönlichen Daten zu gewährleisten, können Sie Programme von Drittherstellern

Mehr

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang Einleitung Dieses Buch wendet sich an jeden Leser, der die Programmiersprache C++ neu lernen oder vertiefen möchte, egal ob Anfänger oder fortgeschrittener C++-Programmierer. C++ ist eine weitgehend plattformunabhängige

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung

Erweiterung AE WWS Lite Win: AES Security Verschlüsselung Erweiterung AE WWS Lite Win: AES Security Verschlüsselung Handbuch und Dokumentation Beschreibung ab Vers. 1.13.5 Am Güterbahnhof 15 D-31303 Burgdorf Tel: +49 5136 802421 Fax: +49 5136 9776368 Seite 1

Mehr

Wie halte ich Ordnung auf meiner Festplatte?

Wie halte ich Ordnung auf meiner Festplatte? Wie halte ich Ordnung auf meiner Festplatte? Was hältst du von folgender Ordnung? Du hast zu Hause einen Schrank. Alles was dir im Wege ist, Zeitungen, Briefe, schmutzige Wäsche, Essensreste, Küchenabfälle,

Mehr

Übung zu Grundlagen der Betriebssysteme. 13. Übung 22.01.2012

Übung zu Grundlagen der Betriebssysteme. 13. Übung 22.01.2012 Übung zu Grundlagen der Betriebssysteme 13. Übung 22.01.2012 Aufgabe 1 Fragmentierung Erläutern Sie den Unterschied zwischen interner und externer Fragmentierung! Als interne Fragmentierung oder Verschnitt

Mehr

Lokale Installation von DotNetNuke 4 ohne IIS

Lokale Installation von DotNetNuke 4 ohne IIS Lokale Installation von DotNetNuke 4 ohne IIS ITM GmbH Wankelstr. 14 70563 Stuttgart http://www.itm-consulting.de Benjamin Hermann hermann@itm-consulting.de 12.12.2006 Agenda Benötigte Komponenten Installation

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Virtual Desktop Infrasstructure - VDI

Virtual Desktop Infrasstructure - VDI Virtual Desktop Infrasstructure - VDI Jörg Kastning Universität Bielefeld Hochschulrechenzentrum 5. August 2015 1/ 17 Inhaltsverzeichnis Was versteht man unter VDI? Welchen Nutzen bringt VDI? Wie funktioniert

Mehr

Multicast Security Group Key Management Architecture (MSEC GKMArch)

Multicast Security Group Key Management Architecture (MSEC GKMArch) Multicast Security Group Key Management Architecture (MSEC GKMArch) draft-ietf-msec-gkmarch-07.txt Internet Security Tobias Engelbrecht Einführung Bei diversen Internetanwendungen, wie zum Beispiel Telefonkonferenzen

Mehr

Das System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert.

Das System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert. Usability Heuristiken Karima Tefifha Proseminar: "Software Engineering Kernkonzepte: Usability" 28.06.2012 Prof. Dr. Kurt Schneider Leibniz Universität Hannover Die ProSeminar-Ausarbeitung beschäftigt

Mehr

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter Die Programmiersprache Java Dr. Wolfgang Süß Thorsten Schlachter Eigenschaften von Java Java ist eine von der Firma Sun Microsystems entwickelte objektorientierte Programmiersprache. Java ist......a simple,

Mehr

Einführung in die technische Informatik

Einführung in die technische Informatik Einführung in die technische Informatik Christopher Kruegel chris@auto.tuwien.ac.at http://www.auto.tuwien.ac.at/~chris Betriebssysteme Aufgaben Management von Ressourcen Präsentation einer einheitlichen

Mehr

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut Von Susanne Göbel und Josef Ströbl Die Ideen der Persönlichen Zukunftsplanung stammen aus Nordamerika. Dort werden Zukunftsplanungen schon

Mehr

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine PhotoLine S/W mit PhotoLine Erstellt mit Version 16.11 Ich liebe Schwarzweiß-Bilder und schaue mir neidisch die Meisterwerke an, die andere Fotografen zustande bringen. Schon lange versuche ich, auch so

Mehr

Outlook Vorlagen/Templates

Outlook Vorlagen/Templates Joachim Meyn Outlook Vorlagen/Templates Erstellen Sie Vorlagen bzw. Templates in Outlook Joachim Meyn 27.03.2013 Inhaltsverzeichnis Outlook Vorlagen (.oft Dateien)... 2 Vorbereitung... 2 Anlegen einer

Mehr

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing.

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing. www.egiz.gv.at E-Mail: post@egiz.gv.at Telefon: ++43 (316) 873 5514 Fax: ++43 (316) 873 5520 Inffeldgasse 16a / 8010 Graz / Austria Beschreibung und Bedienungsanleitung Werkzeug für verschlüsselte bpks

Mehr

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH Amt für Informatik Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH Anleitung vom 12. September 2009 Version: 1.0 Ersteller: Ressort Sicherheit Zielgruppe: Benutzer von SSLVPN.TG.CH Kurzbeschreib:

Mehr

Überprüfung der digital signierten E-Rechnung

Überprüfung der digital signierten E-Rechnung Überprüfung der digital signierten E-Rechnung Aufgrund des BMF-Erlasses vom Juli 2005 (BMF-010219/0183-IV/9/2005) gelten ab 01.01.2006 nur noch jene elektronischen Rechnungen als vorsteuerabzugspflichtig,

Mehr

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit, Wie kann ein PDF File angezeigt werden? kann mit Acrobat-Viewern angezeigt werden auf jeder Plattform!! (Unix,

Mehr

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten Was sind Berechtigungen? Unter Berechtigungen werden ganz allgemein die Zugriffsrechte auf Dateien und Verzeichnisse (Ordner) verstanden.

Mehr

Sicherheit in Software

Sicherheit in Software Sicherheit in Software Fabian Cordt und Friedrich Eder 3. Juni 2011 Allgemeines Begriffserklärung Woher Die 19 Todsünden 1 - Teil 2 - Teil 3 - Teil Was kann passieren Probleme beim Porgramm Durch Lücken

Mehr

Leichte-Sprache-Bilder

Leichte-Sprache-Bilder Leichte-Sprache-Bilder Reinhild Kassing Information - So geht es 1. Bilder gucken 2. anmelden für Probe-Bilder 3. Bilder bestellen 4. Rechnung bezahlen 5. Bilder runterladen 6. neue Bilder vorschlagen

Mehr

Anleitung zur Inbetriebnahme einer FHZ2000 mit der homeputer CL-Software

Anleitung zur Inbetriebnahme einer FHZ2000 mit der homeputer CL-Software Anleitung zur Inbetriebnahme einer FHZ2000 mit der homeputer CL-Software Bei Verwendung eines PCs als Zentrale muss bei der Konfiguration der FHZ2000 die IP-Adresse des PCs angeben werden. Das ist in der

Mehr

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Virtueller Speicher SS 2012 Grundlagen der Rechnerarchitektur Speicher 44 Die Idee Virtuelle Adressen Prozess 1 Speicherblock 0 Speicherblock 1 Speicherblock 2 Speicherblock 3 Speicherblock 4 Speicherblock

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Anmeldung http://www.ihredomain.de/wp-admin Dashboard Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress. Das Dashboard gibt Ihnen eine kurze Übersicht, z.b. Anzahl der Beiträge,

Mehr

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Roboter programmieren mit NXC für Lego Mindstorms NXT 1. Auflage Roboter programmieren mit NXC für Lego Mindstorms NXT schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Verlag

Mehr

Reporting Services und SharePoint 2010 Teil 1

Reporting Services und SharePoint 2010 Teil 1 Reporting Services und SharePoint 2010 Teil 1 Abstract Bei der Verwendung der Reporting Services in Zusammenhang mit SharePoint 2010 stellt sich immer wieder die Frage bei der Installation: Wo und Wie?

Mehr

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY

GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY GEORG.NET Anbindung an Ihr ACTIVE-DIRECTORY Vorteile der Verwendung eines ACTIVE-DIRECTORY Automatische GEORG Anmeldung über bereits erfolgte Anmeldung am Betriebssystem o Sie können sich jederzeit als

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

Informationen zum neuen Studmail häufige Fragen

Informationen zum neuen Studmail häufige Fragen 1 Stand: 15.01.2013 Informationen zum neuen Studmail häufige Fragen (Dokument wird bei Bedarf laufend erweitert) Problem: Einloggen funktioniert, aber der Browser lädt dann ewig und zeigt nichts an Lösung:

Mehr

Tevalo Handbuch v 1.1 vom 10.11.2011

Tevalo Handbuch v 1.1 vom 10.11.2011 Tevalo Handbuch v 1.1 vom 10.11.2011 Inhalt Registrierung... 3 Kennwort vergessen... 3 Startseite nach dem Login... 4 Umfrage erstellen... 4 Fragebogen Vorschau... 7 Umfrage fertigstellen... 7 Öffentliche

Mehr

Avira Support Collector. Kurzanleitung

Avira Support Collector. Kurzanleitung Avira Support Collector Kurzanleitung Inhaltsverzeichnis 1. Einleitung... 3 2. Ausführung des Avira Support Collectors... 3 2.1 Auswahl des Modus...4 3. Einsammeln der Informationen... 5 4. Auswertung

Mehr

Synchronisations- Assistent

Synchronisations- Assistent TimePunch Synchronisations- Assistent Benutzerhandbuch Gerhard Stephan Softwareentwicklung -und Vertrieb 25.08.2011 Dokumenten Information: Dokumenten-Name Benutzerhandbuch, Synchronisations-Assistent

Mehr

Lizenzierung von SharePoint Server 2013

Lizenzierung von SharePoint Server 2013 Lizenzierung von SharePoint Server 2013 Das Lizenzmodell von SharePoint Server 2013 besteht aus zwei Komponenten: Serverlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung der Zugriffe

Mehr

Programmieren was ist das genau?

Programmieren was ist das genau? Programmieren was ist das genau? Programmieren heisst Computerprogramme herstellen (von griechisch programma für Vorschrift). Ein Computerprogramm ist Teil der Software eines Computers. Als Software bezeichnet

Mehr

Eigene Dokumente, Fotos, Bilder etc. sichern

Eigene Dokumente, Fotos, Bilder etc. sichern Eigene Dokumente, Fotos, Bilder etc. sichern Solange alles am PC rund läuft, macht man sich keine Gedanken darüber, dass bei einem Computer auch mal ein technischer Defekt auftreten könnte. Aber Grundsätzliches

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Programme im Griff Was bringt Ihnen dieses Kapitel?

Programme im Griff Was bringt Ihnen dieses Kapitel? 3-8272-5838-3 Windows Me 2 Programme im Griff Was bringt Ihnen dieses Kapitel? Wenn Sie unter Windows arbeiten (z.b. einen Brief schreiben, etwas ausdrucken oder ein Fenster öffnen), steckt letztendlich

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken Dateiname: ecdl5_01_00_documentation_standard.doc Speicherdatum: 14.02.2005 ECDL 2003 Basic Modul 5 Datenbank - Grundlagen

Mehr

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel Orville Bennett Übersetzung: Thomas Bögel 2 Inhaltsverzeichnis 1 Einführung 5 2 KNetAttach verwenden 6 2.1 Hinzufügen von Netzwerkordnern............................ 6 3 Rundgang durch KNetAttach 8 4 Danksagungen

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

MetaQuotes Empfehlungen zum Gebrauch von

MetaQuotes Empfehlungen zum Gebrauch von MetaQuotes Empfehlungen zum Gebrauch von MetaTrader 4 auf Mac OS Auch wenn viele kommerzielle Angebote im Internet existieren, so hat sich MetaQuotes, der Entwickler von MetaTrader 4, dazu entschieden

Mehr

Installieren von Microsoft Office 2012-09-12 Version 2.1

Installieren von Microsoft Office 2012-09-12 Version 2.1 Installieren von Microsoft Office 2012-09-12 Version 2.1 INHALT Installieren von Microsoft Office... 2 Informationen vor der Installation... 2 Installieren von Microsoft Office... 3 Erste Schritte... 7

Mehr

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe Tutorium Informatik 1 Aufgabe 2: Formatierte Ein- und Ausgabe Fachbereich: Elektrotechnik Inhaltsverzeichnis 1 Aufgabe 1 2 Benötigte Funktionen und Schlüsselwörter 2 Robert Halas / FH Regensburg - 2003

Mehr

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert: Firewall für Lexware professional konfigurieren Inhaltsverzeichnis: 1. Allgemein... 1 2. Einstellungen... 1 3. Windows XP SP2 und Windows 2003 Server SP1 Firewall...1 4. Bitdefender 9... 5 5. Norton Personal

Mehr

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 1. Vorwort 1 2. Systemvoraussetzungen 2 3. Programmarten 2 4. Sicherheit der Endnutzer 2 5. Handhabung 3 5.1 allgemeine Programmübersicht 3 5.2

Mehr

How-to: Webserver NAT. Securepoint Security System Version 2007nx

How-to: Webserver NAT. Securepoint Security System Version 2007nx Securepoint Security System Inhaltsverzeichnis Webserver NAT... 3 1 Konfiguration einer Webserver NAT... 4 1.1 Einrichten von Netzwerkobjekten... 4 1.2 Erstellen von Firewall-Regeln... 6 Seite 2 Webserver

Mehr

Anleitung über den Umgang mit Schildern

Anleitung über den Umgang mit Schildern Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder

Mehr

Gruppenrichtlinien und Softwareverteilung

Gruppenrichtlinien und Softwareverteilung Gruppenrichtlinien und Softwareverteilung Ergänzungen zur Musterlösung Bitte lesen Sie zuerst die gesamte Anleitung durch! Vorbemerkung: Die Begriffe OU (Organizational Unit) und Raum werden in der folgenden

Mehr

Anleitung Captain Logfex 2013

Anleitung Captain Logfex 2013 Anleitung Captain Logfex 2013 Inhalt: 1. Installationshinweise 2. Erste Schritte 3. Client-Installation 4. Arbeiten mit Logfex 5. Gruppenrichtlinien-Einstellungen für die Windows-Firewall 1. Installationshinweis:

Mehr

Protect 7 Anti-Malware Service. Dokumentation

Protect 7 Anti-Malware Service. Dokumentation Dokumentation Protect 7 Anti-Malware Service 1 Der Anti-Malware Service Der Protect 7 Anti-Malware Service ist eine teilautomatisierte Dienstleistung zum Schutz von Webseiten und Webapplikationen. Der

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz.

Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz. IInsttallllattiionslleiittffaden Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz. Voraussetzungen Für die Installation

Mehr

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über

Mehr