scip ag
Transcrição
scip ag
scip ag Contents 1. Editorial 2. scip AG Informationen 3. Neue Sicherheitslücken 4. Statistiken Verletzbarkeiten 5. Labs 6. Bilderrätsel 7. Impressum 1. Editorial Falsche Akzeptanz eines möglichen Schutzes scip monthly Security Summary 19.11.2009 Ich fahre täglich mit Bus, Bahn und Tram zur Arbeit. Pro Arbeitsweg sitze ich knapp 45 Minuten in einem öffentlichen Verkehrsmittel. Früher habe ich stets gelesen. Da kommen pro Woche einige hundert Lesestunden zusammen. Mittlerweile mag ich aber nicht immer lesen. Vor allem am Abend bin ich zu müde, um abgesehen von einer seichten Tageszeitung meine Nase noch in ein technisches Buch oder einen Klassiker der Literatur zu stecken. Aus diesem Grund schaue ich unterwegs meistens Filme, Serien oder Dokumentationen. Bei längeren Reisen gerne auf meiner Sony PSP, die mit einem guten Bildschirm und ausgezeichneter Akkulaufzeit überzeugen kann. Seitdem ich jedoch ein iPhone besitze, bin ich etwas faul darin geworden, ein zusätzliches Gadget mit mir herumzuschleppen, so dass ich die meisten Filme auf dem Handy schaue. (Oder halt eben doch die neuesten Meldungen aus den RSS/Twitter-Feeds auf durchgehe.) Unter anderem habe ich den Video Podcast der Wissenssendung "Galileo" von Pro7 abonniert. In diesem werden in jeweils 15-minütigen Berichten spezifische Themen behandelt. Einer der Beiträge setzte sich mit "Sicherheitsprodukten" auseinander. Dort wurden dann eine HandyOrtungs-Software, ein mit FingerabdruckScanner geschützter USB-Stick, eine auf Infrarot- Schranken basierende Alarmanlage sowie ein auf einem Lichtsensor basierende Alarmanlage für Schubladen getestet. Der dafür zuständige "Sicherheitsexperte" agierte meines Erachtens jedoch ungeschickt, ja in allen Fällen gar extrem unsystematisch. Obwohl dies wohl auch grösstenteils mit dem Format des Podcasts zusammenhängt, möchte ich dies zum Anlass nehmen, um ein konkretes Problem von Sicherheitsüberprüfungen zu illustrieren. Der besprochene USB-Stick wies einen kleinen Fingerabdruck-Scanner auf. Erst durch die Authentisierung auf biometrischer Ebene sollte der Zugriff auf die Daten durchgeführt werden können. Das Test-Szenario eines Angriffs bestand nun darin, dass der Stick entwendet und am Rechner des Diebs ausprobiert werden würde. Da sich dieser mit seinem eigenen Fingerabdruck nicht authentisieren konnte, wurde das Produkt als "sicher" eingestuft. Wahrlich vermag der Fingerabdruck-Scanner vor unerlaubten Zugriffen schützen. Doch nur vor unerlaubten Zugriffen, die über den legitimen und damit erwarteten Zugriffsweg geschehen wollen. Der USB-Stick legt die Daten in verschlüsselter Form ab und erst durch das Einlesen des Fingerabdrucks findet eine Entschlüsselung des Vaults statt. Dies geschieht durch eine zusätzlich auf dem Rechner installierte Applikation. Der Vault und damit die chiffrierten Daten sind jedoch immer vorhanden. Der Angreifer kann also auf anderen Wegen versuchen, an diese zu kommen, ohne den Prozess der biometrischen Authentisierung durchlaufen zu müssen. Je nach eingesetzter Verschlüsselung liesse sich diese selbst angreifen. Gerade proprietäre Mechanismen neigen zu schwerwiegenden Fehlern, die ein erfahrener Kryptologe eruieren kann. Spätestens mit einer Chosen-PlaintextAttacke liesse sich das Grundprinzip des Mechanismus bestimmen und mit diesem die möglichen Angriffspunkte. Ich selbst würde jedoch einen anderen Weg bevorzugen. Ich gehe davon aus, dass eine halbwegs intelligente Lösung den OriginalFingerabdruck nicht speichert, sondern mit einem Einweg-Mechanismus die Korrektheit dessen feststellt: Das Einlesen des Fingerabdrucks wird 1/15 s c i p a g © scip AG voraussichtlich einen Bitstream generieren, der als "Passwort" verwendet wird. Dieser Bitstream wird dann in einem Prozess einer klassischen Entschlüsselung auf die Daten des Vaults angewendet. Durch eine stupide BruteforceAttacke liessen sich nun alle Varianten dieses Bitstreams generieren und damit auch ohne den dazugehörigen Finger die Originaldaten wiederherstellen. scip monthly Security Summary 19.11.2009 Der Aufwand und mit ihm der Erfolg dieser Angriffstechnik ist massgeblich von der Komplexität der als Passwort verwendeten Bitstreams abhängig. Durch API Call Interception liessen sich die Bitstreams eines Authentisierungsversuchs mitlesen und dadurch die Komplexität ableiten (oder durch ein Deadlisting der jeweiligen Codeteile). Da der Hersteller des Produkts voraussichtlich stark darauf bedacht ist, dass nicht versehentlich zwei unterschiedliche Fingerabdrücke den gleichen Bitstream generieren, werden wohl eine hohe Anzahl an Prüfpunkten und damit ein langer Bitstream verwendet werden. Das Problem hierbei ist, dass nur selten Bitstreams variabler Länge zum Einsatz kommen. Wird also stets eine 16 Bit lange Zeichenkette eingesetzt, so kommen nur 65'536 = 2^16 Varianten zum Einsatz (ebenso viele unterschiedliche Fingerabdrücke könnten erkannt werden). Eine Bruteforce-Attacke auf einen solch begrenzen Schlüsselraum ist überschaubar und wird in wirtschaftlich vertretbarer Zeit zum Ziel führen. Die Sicherheit eines durch einen Fingerabdruck geschützten USB-Sticks ist also nicht zwingend von der Verfügbarkeit des richtigen Fingers abhängig. Viel mehr gibt es auch noch andere Angriffsflächen, die das biometrische Merkmal als solches gänzlich vernachlässigen lassen. Dann wird das Ganze zu einem klassischen Angriff, der nur noch mit Bits und Mathematik zu tun hat. Marc Ruef <maru-at-scip.ch> Security Consultant Zürich, 12. Oktober 2009 2. scip AG Informationen 2.1 Source Code Analysis Das Ziel unserer Dienstleistung Source Code Analysis ist die Identifikation ineffizienter und fehlerhafter Codebereiche sowie die Definierung der Tragweite dadurch möglicher erfolgreicher Attacken durch Angreifer oder allfälliger Stabilitätsprobleme. Der Kunde stellt uns den unkompilierten und nach Möglichkeiten dokumentierten Quelltext der zu untersuchenden Applikation zur Verfügung. Die optionale Abgabe eines Handbuchs sowie ein Code Walkthrough durch die Entwickler helfen dabei, das Produkt zu verstehen. Kritische Funktionen finden: Identifizieren problematischer und fehlerhafter Funktionen (z.B. strcpy() in C/C++ oder file() in PHP). Programmflussanalyse: Bestimmen des Programmablaufs anhand der Conditionals und genutzter Prädikatenlogik. Datenpfadanalyse: Verfolgen der Datenverarbeitung von Eingaben/Ausgaben, Variablen und Konstanten im Programm. Slicing: Eingrenzung affektierter und tangierter Codeteile zur Reduzierung der determinierten Probleme. Die Source Code Analysis (SCA) gilt als akademisch mächtigstes und wirtschaftlich effizientestes Werkzeug zur Identifikation von Schwachstellen in einer Software-Lösung. Sehr schnell und akkurat können etwaige Fehlerquellen in Anwendungen ausgemacht und die Tragweite derer bestimmt werden. Aus diesem Grund werden Quelltext-Analysen je länger je mehr komplementär zu einem Application Penetration Test eingesetzt. Dank unserer langjährigen Erfahrung und unserem ausgewiesenen Expertenwissen haben wir als scip AG bereits eine Vielzahl von Source Code Analysen Projekte durchgeführt. Zählen auch Sie auf uns! http://www.scip.ch/?firma.referenzenalle Zögern Sie nicht und kontaktieren Sie unseren Herrn Chris Widmer unter der Telefonnummer +41 44 404 13 13 oder senden Sie im eine Mail an [email protected]. 2/15 s c i p a g © scip AG 3. Neue Sicherheitslücken Die erweiterte Auflistung hier besprochener Schwachstellen sowie weitere Sicherheitslücken sind unentgeltlich in unserer Datenbank unter http://www.scip.ch/?vuldb einsehbar. Die Dienstleistungspakete)scip( pallas liefern Ihnen jene Informationen, die genau für Ihre Systeme relevant sind. Expertenmeinung: Auch wenn derzeit kein öffentliches Exploit zur Verfügung steht, so ist diese Schwachstelle tendentiell eher als kritisch zu betrachten, zumal hier Code im Kernel Mode zur Ausführung gebracht werden kann, was in einem gezielten Angriff nahezu in jedem Fall zur Kompromittierung des Systems führen dürfte. Das zeitnahe Einspielen des entsprechenden Patches ist angeraten. 16 14 12 10 8 6 4 2 0 Okt 09 Nov 09 sehr kritisch 3 1 kritisch 15 3 problematisch 3 2 Contents: 4060 4059 4058 4057 4056 scip monthly Security Summary 19.11.2009 4054 4053 4052 Microsoft Windows Win32k KernelMode Driver mehrere Schwachstellen Apple Mac OS X mehrere Schwachstellen Microsoft Windows Active Directory Denial of Service Microsoft Excel verschiedene Schwachstellen Microsoft Office Word File Information Block Parsing Pufferüberlauf Wireshark verschiedene Denial of Service Schwachstellen VMware verschiedene Produkte Host Privilege Escalation Mozilla Firefox mehrere Schwachstellen 3.1 Microsoft Windows Win32k KernelMode Driver mehrere Schwachstellen Risiko: Remote: Datum: scip DB: Entwicklungszweig zu Gunsten der Windows-NTProduktlinie aufgegeben und Windows bezeichnet das Betriebssystem als Ganzes. Tavis Ormandy des Google Security Teams identifizierte verschiedene Schwachstelle in der Datei win32k.sys, die beim Parsen von FontCode ausgelöst wird. Dadurch kann im Kernel Mode beliebiger Code zur Ausführung gebracht werden, was die Kompromittierung des Systems zur Folge haben kann. kritisch Ja 10.11.2009 http://www.scip.ch/?vuldb.4060 Microsoft Windows ist ein Markenname für Betriebssysteme des Unternehmens Microsoft. Ursprünglich war Microsoft Windows eine grafische Erweiterung des Betriebssystems MSDOS (wie beispielsweise auch GEM oder PC/GEOS), inzwischen wurde dieser 3.2 Apple Mac OS X mehrere Schwachstellen Risiko: Remote: Datum: scip DB: problematisch Ja 10.11.2009 http://www.scip.ch/?vuldb.4059 Mac OS X ist eine proprietäre Darwin-Distribution des Unternehmens Apple und setzt die Produktlinie Mac OS als Betriebssystem der hauseigenen Macintosh-Computer fort. In einem kumulativen Patchpaket adressiert Apple insgesamt 37 Schwachstellen in verschiedenen Applikationen und Betriebssystemkomponenten. Expertenmeinung: Mit gut drei Dutzend Patches ist dieser kumulative Patch diesen Monat klar der Spitzenreiter, was ganze Ansammlungen von Updates angeht. Auch hier gilt: Die Installation dieser Patches ist aufgrund der zugrundeliegenden, oft eher kritisch veranlagten Sicherheitsprobleme, stark empfohlen und sollte zeitnah durchgeführt werden. 3.3 Microsoft Windows Active Directory Denial of Service Risiko: Remote: Datum: scip DB: kritisch Ja 10.11.2009 http://www.scip.ch/?vuldb.4058 Microsoft Windows ist ein Markenname für Betriebssysteme des Unternehmens Microsoft. Ursprünglich war Microsoft Windows eine grafische Erweiterung des Betriebssystems MS- 3/15 s c i p a g © scip AG DOS (wie beispielsweise auch GEM oder PC/GEOS), inzwischen wurde dieser Entwicklungszweig zu Gunsten der Windows-NTProduktlinie aufgegeben und Windows bezeichnet das Betriebssystem als Ganzes. Durch einen Fehler im Active Directory, Active Directory Application Mode (ADAM) und im Active Directory Lightweight Directory Service (AD LDS) kann ein Angreifer einen Denial of Service verursachen. Expertenmeinung: Active Directory Systeme nehmen in Windows Netzwerken einen essentiellen Platz ein und sind daher als sensitiv zu betrachten. Aus diesem Grund ist diese Schwachstelle grundsätzlich als kritisch zu betrachten und sollte zeitnah adressiert werden. 3.4 Microsoft Excel verschiedene Schwachstellen scip monthly Security Summary 19.11.2009 Risiko: Remote: Datum: scip DB: kritisch Ja 10.11.2009 http://www.scip.ch/?vuldb.4057 Microsoft Excel ist ein Tabellenkalkulationsprogramm. Es ist heute die meistverbreitete Software für Tabellenkalkulation. Excel gehört zur Microsoft-Office-Suite und ist sowohl für Microsoft Windows als auch für Mac OS verfügbar. Excel entstand als Nachfolger von Microsoft Multiplan. Die aktuell verfügbare Version ist für Windows Microsoft Excel 2007 (seit 30. November 2006 für Firmenkunden bzw. seit 30. Januar 2007 für Privatkunden) sowie für Mac OS Microsoft Excel 2008 (seit Januar 2008). In einem Advisory beschreibt Hersteller Microsoft insgesamt acht Schwachstellen, deren mögliche Implikationen meistens einen Pufferüberlauf enthalten. Expertenmeinung: Insgesamt acht Schwachstelle fixt Microsoft mit diesem kumulativen Update und eliminiert damit eine Vielzahl von Schwachstellen. Anwender und Admininstratoren sollten zeitnah um die Verteilung dieses Updates auf allen relevanten Systemen bemüht sein. 3.5 Microsoft Office Word File Information Block Parsing Pufferüberlauf Risiko: Remote: Datum: scip DB: sehr kritisch Ja 10.11.2009 http://www.scip.ch/?vuldb.4056 Microsoft Word (oft auch kurz MS Word oder Word genannt) ist ein Textverarbeitungsprogramm der Firma Microsoft für die Windows-Betriebssysteme und Mac OS. Es ist Teil der Office-Suite Microsoft Office sowie der auf private Nutzer zugeschnittenen Programmsammlung Microsoft Works Suite, wird aber auch einzeln verkauft. Jun Mao fand eine Schwachstelle in aktuellen Word Versionen, bei denen durch einen Missbrauch des FIB (File Information Block) in einem manipulierten Word Dokument durch einen Stack Overflow beliebiger Code zur Ausführung gebracht wird. Expertenmeinung: Die vorliegende Schwachstelle ist als kritisch zu betrachten und dürfte in kürze auch landläufig ausgenutzt werden. Verwundbare Installation sollten daher binnen kürzest möglicher Zeit auf einen aktuellen Stand gebracht werden. 3.6 Wireshark verschiedene Denial of Service Schwachstellen Risiko: Remote: Datum: scip DB: problematisch Ja 28.10.2009 http://www.scip.ch/?vuldb.4054 Wireshark (engl. „wire“: Draht, Kabel; „shark“: Hai; alte Bezeichnung: Ethereal) ist ein freies Programm zur Analyse von NetzwerkKommunikationsverbindungen. In einem aktuellen Advisory beschreibt der Hersteller verschiedene Möglichkeiten, einen Denial of Service durch verschiedene Schwachstellen herbeizuführen. Expertenmeinung: Auch hier handelt es sich lediglich um eine relativ unkritische Schwachstelle. Anwender sollten dennoch zeitnah eine neue Version einsetzen, sofern möglich. 3.7 VMware verschiedene Produkte Host Privilege Escalation Risiko: Remote: Datum: scip DB: problematisch Ja 28.10.2009 http://www.scip.ch/?vuldb.4053 VMware, Inc., ist ein US-amerikanisches Unternehmen, das Software im Bereich der Virtualisierung entwickelt. Das Unternehmen wurde 1998 mit dem Ziel gegründet, eine Technik zu entwickeln, virtuelle Maschinen auf StandardComputern zur Anwendung zu bringen. Das bekannteste Produkt ist VMware Workstation. Durch einen Fehler in aktuellen Versionen 4/15 s c i p a g © scip AG verschiedene VMware Produkte kann ein Angreifer erweiterte Rechte innerhalb einer VMware Instanz erhalten. Expertenmeinung: Während der vorliegende Fehler nicht als kritisch zu betrachten ist, sollten betroffene Systeme dennoch zeitnah durch das Einspielen der entsprechenden Patches auf einen aktuellen Stand gebracht werden. 3.8 Mozilla Firefox mehrere Schwachstellen Risiko: Remote: Datum: scip DB: kritisch Ja 29.10.2009 http://www.scip.ch/?vuldb.4052 scip monthly Security Summary 19.11.2009 Mozilla Firefox (amerikanisch-englische Aussprache) ist ein freier Webbrowser des Mozilla-Projekts. Der seit Mitte 2002 entwickelte Open-Source-Webbrowser bietet die Möglichkeit, eine breite Palette an Erweiterungen zu implementieren. Firefox ist nach dem Internet Explorer der am zweithäufigsten genutzte Webbrowser. Ein Patch des Herstellers schliesst rund 15 Schwachstellen, deren Auswirkungen teilweise unbekannt. Diverse Schwachstellen erlauben erwiesenermassen die Ausführung beliebigen Programmcodes im Kontext der Applikation. Expertenmeinung: Insgesamt 15 Schwachstelle fixt das Mozilla Projekt mit dem neusten Release 3.5.4 und eliminiert damit eine Vielzahl von Schwachstellen, die teilweise in junger Vergangenheit besprochen wurden. Anwender und Admininstratoren sollten zeitnah um die Verteilung dieses Updates auf allen relevanten Systemen bemüht sein. 5/15 s c i p a g © scip AG 4. Statistiken Verletzbarkeiten 900 Die im Anschluss aufgeführten Statistiken basieren auf den Daten der deutschsprachige Verletzbarkeitsdatenbank der scip AG. 800 700 600 http://www.scip.ch/?vuldb 500 Zögern Sie nicht uns zu kontaktieren. Falls Sie spezifische Statistiken aus unserer Verletzbarkeitsdatenbank wünschen so senden Sie uns eine E-Mail an mailto:[email protected]. Gerne nehmen wir Ihre Vorschläge entgegen. 400 300 200 Auswertungsdatum: 19. November 2009 100 0 2003 2004 2005 2006 2007 2008 2009 sehr kritisch 56 15 15 6 11 11 18 kritisch 214 314 402 442 229 140 66 problematisch 170 287 423 396 419 176 66 Verlauf der Anzahl Schwachstellen pro Jahr 20 25 18 16 20 14 12 15 10 8 10 scip monthly Security Summary 19.11.2009 6 4 5 2 0 0 2009 - Sep sehr kritisch 2009 - Okt 2009 - Nov 3 1 2009 - Okt 2009 - Nov 3 1 1 2 2 5 18 1 Denial of Service (DoS) Designfehler Directory Traversal kritisch 5 15 3 Eingabeungültigkeit problematisch 6 3 2 Fehlende Authentifizierung Verlauf der letzten drei Monate Schwachstelle/Schweregrad 2009 - Sep Cross Site Scripting (XSS) Fehlende Verschlüsselung Fehlerhafte Leserechte Fehlerhafte Schreibrechte Format String Konfigurationsfehler Pufferüberlauf Race-Condition 4 1 Schw ache Authentifizierung Schw ache Verschlüsselung Verlauf der letzten drei Monate Schwachstelle/Kategorie 6/15 s c i p a g © scip AG Registrierte Schwachstellen by scip AG 25 21 20 17 16 15 16 15 13 12 11 11 11 10 6 2009 - Dez 2009 - Okt 2009 - Sep 2009 - Aug 2009 - Jul 2009 - Jun 2009 - Mai 2009 - Apr 2009 - Mrz 2009 - Feb 2009 - Jan 0 2009 - Nov 5 Verlauf der Anzahl Schwachstellen pro Monat - Zeitperiode 2009 25 scip monthly Security Summary 19.11.2009 20 15 10 5 0 2009 - Jan 2009 - Feb 2009 - Mrz 2009 - Apr 2009 - Mai 2009 - Jun 2009 - Jul 2009 - Aug 2009 - Sep 2009 - Okt 2009 - Nov 2009 - Dez 6 2 3 1 kritisch 9 1 4 1 4 7 10 3 5 5 15 3 problematisch 6 11 11 7 7 3 3 6 6 3 2 sehr kritisch 5 Verlauf der Anzahl Schwachstellen/Schweregrad pro Monat - Zeitperiode 2009 7/15 s c i p a g © scip AG 20 18 16 14 12 10 8 6 4 2 0 2009 - Jan 2009 - Feb 2009 - Mrz 2009 - Apr 2009 - Mai 2009 - Jun 2009 - Jul Cross Site Scripting (XSS) 2 Denial of Service (DoS) 2 2 8 Designfehler 1 2 2 4 1 2009 Aug 2 2 1 12 12 2009 - Sep 2009 - Okt 2009 - Nov 2009 - Dez 1 1 3 1 3 2 2 5 5 18 1 Directory Traversal Eingabeungültigkeit 1 1 Fehlende Authentifizierung Fehlende Verschlüsselung Fehlerhafte Leserechte Fehlerhafte Schreibrechte Format String Konfigurationsfehler Pufferüberlauf 9 5 4 6 8 4 1 Race-Condition 1 Schw ache Authentifizierung Schw ache Verschlüsselung SQL-Injection scip monthly Security Summary 19.11.2009 Symlink-Schw achstelle 2 Umgehungs-Angriff Unbekannt 1 1 1 5 1 1 2 Verlauf der Anzahl Schwachstellen/Kategorie pro Monat - Zeitperiode 2009 8/15 s c i p a g © scip AG Registrierte Schwachstellen by scip AG 120 111 103 100 98 94 85 83 80 80 77 79 76 70 70 70 62 60 62 55 77 71 68 65 68 55 54 51 48 47 44 5152 49 40 77 52 45 42 40 32 27 27 30 2726 23 20 37 35 26 23 20 21 1716 1516 13 12 111111 7 6 2009 - Nov 2009 - Sep 2009 - Jul 2009 - Mai 2009 - Mrz 2009 - Jan 2008 - Nov 2008 - Sep 2008 - Jul 2008 - Mai 2008 - Mrz 2008 - Jan 2007 - Nov 2007 - Sep 2007 - Jul 2007 - Mai 2007 - Mrz 2007 - Jan 2006 - Nov 2006 - Sep 2006 - Jul 2006 - Mai 2006 - Jan 2006 - Mrz 2005 - Nov 2005 - Jul 2005 - Sep 2005 - Mai 2005 - Jan 2005 - Mrz 0 Verlauf der Anzahl Schwachstellen pro Monat seit Januar2005 120 100 scip monthly Security Summary 19.11.2009 80 60 40 20 0 sehr kritisch kritisch 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 05 05 05 05 05 05 05 05 05 05 05 05 06 06 06 06 06 06 06 06 06 06 06 06 07 07 07 07 07 07 07 07 07 07 07 07 08 08 08 08 08 08 08 08 08 08 08 08 09 09 09 09 09 09 09 09 09 09 09 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 2 1 1 1 2 1 25 33 38 58 47 20 46 20 26 42 37 10 30 38 27 37 33 44 41 42 52 27 27 43 49 23 9 15 24 14 18 11 15 15 17 19 10 20 13 31 4 1 2 2 2 3 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 4 1 1 1 7 8 12 7 6 4 18 9 4 problematisch 51 49 32 51 56 18 46 26 28 26 24 16 48 13 25 32 44 35 21 42 24 38 40 34 49 47 16 36 31 34 25 36 39 51 34 22 31 11 9 1 6 2 4 7 10 3 5 5 15 3 7 6 6 4 22 17 28 7 19 16 3 10 6 11 11 7 5 3 3 3 3 1 2 Verlauf der Anzahl Schwachstellen/Schweregrad pro Monat seit Januar 2005 9/15 s c i p a g © scip AG 50 45 40 35 30 25 20 15 10 5 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Cross Site Scripting (XSS) 1 3 1 20 3 2 10 4 5 6 5 1 3 4 3 6 3 8 6 4 6 3 2 2 7 2 2 3 4 6 4 7 11 8 5 11 4 1 3 2 3 1 5 1 1 2 1 1 2 2 Denial of Service (DoS) 15 6 12 19 30 6 25 4 12 15 24 4 25 10 10 9 12 14 13 16 20 24 15 21 32 11 10 11 14 4 5 5 8 12 7 3 9 3 1 1 6 3 6 3 3 Designfehler 29 44 16 30 36 14 15 18 12 13 12 7 15 12 12 27 23 13 14 19 7 12 19 11 7 3 1 1 2 1 1 2 Directory Traversal Eingabeungültigkeit 1 1 Fehlende Authentifizierung 1 2 1 1 2 1 1 1 2 2 1 1 2 4 2 1 6 1 2 Fehlerhafte Schreibrechte 1 2 2 1 1 Format String 2 3 2 1 1 1 4 1 2 2 1 3 2 2 1 1 1 2 1 6 1 2 1 3 1 2 4 1 2 2 2 1 1 3 1 1 Fehlerhafte Leserechte Fehlende Verschlüsselung 1 1 3 1 8 1 7 6 3 6 10 2 3 1 2 1 2 2 8 4 1 2 1 2 1 1 3 1 1 3 2 2 1 11 4 3 3 3 6 2 4 2 1 1 1 1 2 1 1 1 1 1 3 4 2 3 2 1 3 1 1 1 1 1 3 1 1 1 1 1 3 1 2 1 1 1 3 1 2 4 1 2 1 Konfigurationsfehler 3 4 1 7 6 1 2 6 3 1 3 1 1 1 1 1 1 1 1 1 2 1 1 1 Pufferüberlauf 19 14 20 26 22 6 14 15 16 19 12 8 18 17 13 17 20 20 17 19 27 12 17 23 24 24 4 19 27 20 24 24 16 28 23 17 18 16 10 25 10 14 12 13 14 15 4 26 9 5 4 6 12 12 8 5 5 18 4 Race-Condition 2 2 3 3 Schw ache Authentifizierung 1 Schw ache Verschlüsselung 1 1 SQL-Injection 1 1 1 Symlink-Schw achstelle 1 5 1 1 1 6 2 2 2 1 1 2 2 1 1 1 Umgehungs-Angriff 5 Unbekannt 1 8 7 2 2 2 6 1 1 1 1 1 1 2 2 4 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 4 1 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 3 4 1 1 1 1 1 2 1 3 2 1 2 2 1 1 3 1 5 1 1 3 2 4 3 4 2 4 2 2 4 2 4 1 6 1 1 5 2 4 1 5 7 4 10 4 6 6 7 11 5 1 3 2 2 3 1 3 4 2 2 3 3 1 1 1 1 2 1 2 1 1 1 1 5 1 1 2 scip monthly Security Summary 19.11.2009 Verlauf der Anzahl Schwachstellen/Kategorie pro Monat seit Januar 2005 10/15 s c i p a g © scip AG 5. Labs Auf der scip Labs Webseite (http://www.scip.ch/?labs.archiv) werden regelmässig Neuigkeiten und Forschungsberichte veröffentlicht. 5.1 Grundlegende Javascript Malware Analyse: Ein Beispiel 27.10.2009, Stefan Friedli, [email protected] Für die Sicherheit der eigenen Web Applikation zu sorgen, ist die Verantwortung jedes Webseitenbetreibers. Doch wird eine Seite kompromittiert, so muss adäquat reagiert werden. Gerade wenn eine Webpräsenz dazu missbraucht wird, deren Benutzer mit Schadsoftware oder Exploits zu attackieren, ist eine Klärung der Umstände unabdinglich, um eine professionelle Reaktion zu gewährleisten und den schier unabwendbaren Reputationsschaden möglichst gering zu halten. Wie soll man jedoch im Detail herausfinden, was der auf der eigenen Seite befindliche Schadcode tut und dies auch noch in einer nachvollziehbaren und sicheren Weise? Der Ansatz, der hier in der Regel gewählt wird, ist eine strukturierte Analyse des Schadcodes, den ich im Folgenden an einem konkreten Beispiel erklären möchte. Schritt 1: Re-Formatierung Was im ersten Moment verwirrend aussieht, entsteht in erster Linie durch die (bewusste) Abwesenheit sämtlicher, der Übersicht dienlichen Massnahmen der Codeformatierungen, wie zum Beispiel Zeilenumbrüche oder Einrückungen von Codeblöcken. Javascript schert sich herzlich wenig um diesen Mangel an Sauberkeit, wir dagegen schon. Allerdings geht es dabei nicht um die Ästhetik, sondern die logische Verteilung des Codes auf einzelne, klar identifizierbare Linien. Das erleichtert das exakte Setzen der Breakpoints später enorm und erleichtert natürlich das Lesen des Codes. scip monthly Security Summary 19.11.2009 Achtung: Es handelt sich hierbei um einen realen Fall mit realem Schadcode der unter Umständen ebenso realen Schaden auf Ihrem System anrichten kann. Bitte besuchen Sie die genannten URIs nicht und betrachten Sie sämtliche Scripts ausschliesslich in einem Texteditor und Rhino, nicht in einem Webbrowser. Es besteht kein Haftungsanspruch. Ausgangslage Es wurde beobachtet, dass die Datei counter.js von einem Server mit russischer Domänenendung überdurchschnittlich oft in eine kompromittierte Seite eingebunden wird – teils mehrmals auf der selben Seite (Danke an Andreas für den Hinweis). Alle Dateien, die im Rahmen dieses Beitrages verwendet werden, stehen unter http://www.scip.ch/labs/files/20091027_jsmalware .zip zum Download bereit. Auch hier gilt die oben genannte Warnung. Schritt 2: Analyse Nachdem der Code allein durch eine etwas sauberere Formatierung bereits viel lesbarer ist, ist die weitere Bearbeitung geschmackssache. Während einige die “Trockenanalyse” im Texteditor vorziehen (Deadlisting), werden wir in an dieser Stelle den freien Javascript Debugger Rhino des Mozilla Projektes nutzen, um das File weiter zu analysieren. Rhino wird im Hinblick auf derartige Use-Cases in der Regel missverstanden. Rhino ist eine komplett eigenständige, in Java gehaltene, Javascript Implementierung. Das heisst konkret: Die Syntax, wie sie unser Script verwendet, wird 11/15 s c i p a g © scip AG komplett verstanden. Rhino ist aber kein FirefoxEmulator, wodurch gewisse DOM-Objekte wie document, window oder ähnliches nicht von Haus aus verfügbar sind. So kommt es denn auch, dass Rhino bereits in der ersten Zeile unseres Scripts seinen Dienst verwehrt, weil ihm document.cookie unbekannt ist. scip monthly Security Summary 19.11.2009 var $a = document.cookie;// Lese Cookie var $b = $a.indexOf("opt=");// Prüfe ob das Cookie String "opt=" enthält if ($b != -1) {// Prüfe, ob Suche erfolglos war } else { var $c = new Date;// Generiere Datum $c.setTime($c.getTime() + 3600000);// Generiere Timeout document.cookie = "opt=update;expires=" + $c.toGMTString(); // Cookie 2. Dadurch, dass das Objekt document.cookie im Regelfall in Sandbox Umgebung, wir der von uns angestrebten, nicht existiert, wird die automatisierte Analyse z.B. durch Web Gateways erschwert. Es existieren zwar weitaus perfidere Methoden, derartige Fallen zu implementieren, weshalb wir hier nicht im Detail darauf eingehen wollen. Stattdessen ist unser Ziel, die Ausführung des Codes zu ermöglichen. Das erreichen wir sehr einfach, indem wir das gewünschte Objekt selber bauen. document.cookie ist ein String Wert, der im Falle eines Webbrowsers sowohl lesend wie auch schreibend genutzt werden kann. Wir fügen daher folgende Definition zu Beginn des Scripts ein: // Emulate document.cookie behaviour function dummyStruct() { this.cookie = "Foo"; } document = new dummyStruct(); Durch diese Änderung wird unser Script weitgehend lauffähig. $a wird der Wert Foo aus unserer Dummy-Struktur zugewiesen. Darin ist der String opt= natürlich nicht enthalten, weshalb b den Wert -1 erhält und das Script weiter ausgeführt wird. $c wird anschliessend als Datumsobjekt erstellt und document.cookie wird neu gesetzt. Nach der Ausführung des initialen Codeblocks folgt der Hauptteil des Scripts, der in einem tryBlock enkapsuliert ist, um keine auffälligen Meldungen im Falle eines Fehlers während der Ausführung zu generieren. Die zahlreichen Funktionsdefinitionen, die folgen, sind für uns im Moment nur reduziert relevant, wie widmen uns daher direkt der nächsten Zeile, die direkt ausgeführt werden soll: Der erste Teil des Skripts ist sehr einfach verständlich. Der Autor liest die Cookiedaten der geladenen Seite aus und prüft, ob die Variable opt gesetzt ist. Wenn dies der Fall ist, so gibt die Funktion indexOf in der zweiten Zeile einen positiven Integer Wert, nämlich die Position des Strings opt= im Cookiestring aus. Der Autor des Scripts war aber darum bemüht, dass der weitere Verlauf des Scripts nur zur Ausführung kommt, wenn opt nicht bereits gesetzt wurde. Ist dies der Fall, so setzt er in den nächsten Zeilen des Cookie selber, versehen mit einem Timeout von einer Stunde. Dieser erste Codeblock erfüllt mehrere Zwecke: 1. Das Script wird auch bei mehreren Injektionen nur einmal binnen einer gewissen Zeitspanne ausgeführt, nämlich bei der ersten Instanzierung wenn kein Cookie existiert. document["w4151r4772i8362t4773e89191 269".replace(/[0-9]/g, "")](SPyDgNA("CgTm"), cues("YwUqxSVvI")); Auch hier bedient sich der Autor wieder mehrerer Tricks, um seinen Code möglichst immun gegenüber automatisierten Analysen zu machen. Verschiedene Punkte sind auffällig: 1. Die übliche, allgemein verbreitete Syntax, um eine Funktion eines Objektes aufzurufen, verwendet Punkte als Delimiter. Zum Beispiel wird mit window.close() die Funktion zum Schliessen eines Browserfensters aufgerufen. Alternativ könnte diese Funktion aber auch über die weitaus seltenere Syntax window["close"] aufgerufen werden. 12/15 s c i p a g © scip AG 2. Der Autor will also eine Funktion des DOM Objektes document ansteuern, aber der Name der Funktion ("w4151r4772i8362t4773e89191269") erscheint seltsam. Allerdings wird auf diesen String direkt die Funktion replace(/[0-9]/g angewendet, die alle numerischen Zeichen aus dem String entfernt. Das ergibt, was der eine oder andere mittlerweile bereits selber entdeckt hat: document["write"] – die übliche Funktion, die verwendet wird, um direkt in das geladene HTML File zu schreiben. Wie vorgängig erwähnt, dienen auch diese Mechanismen dem Aushebeln von automatisierten Filtermechanismen. Im Regelfall suchen selbige nach auffälligen Patterns, wie eben document.write oder ähnlich. Durch das Nutzen der sprachlichen Logik, wird eine musterbasierte Erkennung nahezu verunmöglicht, der Code muss interpretiert werden, um den verdächtigen Code zu identifizieren. Diese Funktionalität ist aber bislang nur sehr wenigen Content Filtern und vergleichbaren Gerätschaften vergönnt, was den Einsatz an dieser Stelle erklärt. Wir wissen mittlerweile, dass es offensichtlich das primäre Ziel der Applikation ist, Daten zur Laufzeit in die geladene Seite zu injizieren. Die Frage ist nun, um was für Daten es sich handelt. Schauen wir uns noch einmal die Funktion an, wie wir sie vorgängig aufgeschlüsselt haben: scip monthly Security Summary 19.11.2009 document["write"](SPyDgNA("CgTm"), cues("YwUqxSVvI")); Es sollen die Rückgabewerte der Funktionen SPyDgNA und cues, jeweils mit einem vordefinierten String als Parameter, ausgegeben werden. Die beiden Funktionen werden im Script definiert und beinhalten – beide – eine liebevoll verkomplizierte Reihe von Umwandlungen, die letzten Endes zu den gewünschten Endresultaten führen, die ausgegeben werden sollen. Während ich dem geneigten Leser nicht vorenthalten möchte, diese beiden Funktionen im Detail auseinanderzupflücken, um die genaue Funktion nachzuvollziehen, können wir es uns an dieser Stelle durch den Einsatz unseres Debuggers deutlich bequemer machen. Wir könnten in der oben dargestellten Zeile des document.write Aufrufes einfach einen Breakpoint setzen und danach über die Evaluate-Funktion in Rhino die beiden Funktionen manuell aufrufen. Diese Methode ist adäquat, um die Ausgabe von document.write hier zu eruieren, allerdings hat sie den entscheidenden Nachteil, dass wir den weiteren Verlauf des Scripts nicht mehr nachvollziehen können, weil Rhino mangels Kenntnis der Funktion document.write gegen die Wand läuft. Wir entscheiden uns daher für die nachhaltigere Methode und implementieren in unserer bereits existenten Dummy-Klasse die Funktion write. // Emulate document.cookie behaviour function dummyStruct() { this.cookie = "Foo"; this.write = function(str, str2) { var output = "" for (var n = 0; n < arguments.length; n++) { output += arguments[n]; } print(output); } } document = new dummyStruct(); Die Funktion write emuliert die Ausgabe im Browser, schreibt aber die jeweiligen Strings statt in ein Browserfenster in die Funktionsvariable output und anschliessend mittels der Funktion print() in die Debugging Konsole (Window -> Console) von Rhino. Der Umweg über die outputVariable ist nötig, weil print() standardmässig einen Zeilenumbruch (\n) anfügt, was die Ausgabe bei Verwendung mehrerer Argumente unerwünschterweise verändert. Da wir nun alle Fallstricke umgangen und unseren Ausgabekanal definiert haben, lassen wir Rhino durch das Script laufen. Es empfiehlt sich, am Ende der Funktion cues() einen Breakpoint zu setzen, um das Verhalten nach dem initialen document.write zu beobachten, falls weitere Aktionen angestrebt werden. Im vorliegenden Fall scheint sich die Funktionalität aber, zumindest zum Zeitpunkt des ersten Ladevorgangs, auf den analysierten Funktionsaufruf zu beschränken. Nachdem das Script vollständig durchgelaufen ist, können wir über die Konsole den HTML Code betrachten, den das Script via document.write in die betroffene Webseite zu schreiben versucht: Schlussfolgerung 13/15 s c i p a g © scip AG scip monthly Security Summary 19.11.2009 Betrachten wir nun die Ausgabe, so wird schnell klar, dass es sich beim Script um einen klassischen Loader für Drive-by Angriffe handelt. Die geladene Seite enthält weitere Scripts, die durch das geschriebene iFrame nachgeladen und ausgeführt werden. Die Domäne yahoosite . ru, die wir an dieser Stelle bewusst weder korrekt ausschreiben noch verlinken möchte, ist übrigens eine bekannte FastFlux Ressource und scheint, zumindest den 1,6 Millionen Google Resultaten zu Folge, schon länger verwendet zu werden. 14/15 s c i p a g © scip AG 6. Impressum Herausgeber: scip AG Badenerstrasse 551 CH-8048 Zürich T +41 44 404 13 13 mailto:[email protected] http://www.scip.ch scip monthly Security Summary 19.11.2009 Zuständige Person: Marc Ruef Security Consultant T +41 44 404 13 13 mailto:[email protected] scip AG ist eine unabhängige Aktiengesellschaft mit Sitz in Zürich. Seit der Gründung im September 2002 fokussiert sich die scip AG auf Dienstleistungen im Bereich Information Security. Unsere Kernkompetenz liegt dabei in der Überprüfung der implementierten Sicherheitsmassnahmen mittels Penetration Tests und Security Audits und der Sicherstellung zur Nachvollziehbarkeit möglicher Eingriffsversuche und Attacken (LogManagement und Forensische Analysen). Vor dem Zusammenschluss unseres spezialisierten Teams waren die meisten Mitarbeiter mit der Implementierung von Sicherheitsinfrastrukturen beschäftigen. So verfügen wir über eine Reihe von Zertifizierungen (Solaris, Linux, Checkpoint, ISS, Cisco, Okena, Finjan, TrendMicro, Symantec etc.), welche den Grundstein für unsere Projekte bilden. Das Grundwissen vervollständigen unsere Mitarbeiter durch ihre ausgeprägten Programmierkenntnisse. Dieses Wissen äussert sich in selbst geschriebenen Routinen zur Ausnutzung gefundener Schwachstellen, dem Coding einer offenen Exploiting- und Scanning Software als auch der Programmierung eines eigenen LogManagement Frameworks. Den kleinsten Teil des Wissens über Penetration Test und LogManagement lernt man jedoch an Schulen – nur jahrelange Erfahrung kann ein lückenloses Aufdecken von Schwachstellen und die Nachvollziehbarkeit von Angriffsversuchen garantieren. Einem konstruktiv-kritischen Feedback gegenüber sind wir nicht abgeneigt. Denn nur durch angeregten Ideenaustausch sind Verbesserungen möglich. Senden Sie Ihr Schreiben an [email protected]. Das Errata (Verbesserungen, Berichtigungen, Änderungen) der scip monthly Security Summarys finden Sie online. Der Bezug des scip monthly Security Summary ist kostenlos. Anmelden! Abmelden! 15/15