Post on 30-Mar-2021
transcript
Andreas Schmidta.schmidt@siberas.de
25.05.2011
Bio
Andreas Schmidt
• Seit 1998 im Security-Bereich tätig
• Seit 2001 spezialisiert auf Audits/Penetrationstests
• Mitgründer von siberas (2009)
• http://www.siberas.de
Agenda
(Tool-)Überblick
Motivation
Hauptkomponenten
Highlights
RoadMap
Demo: WATOBO in action
Überblick
Kommerzielle Tools• WebInspect, AppScan, NTOSpider, Acunetix, ....• Fokus: vollautomatisierte Audits
Freie Tools• WebScarab, Paros, BurpSuite(+$), ...• Fokus: manuelle Penetrationstests
1001+ Script-Tools• Nikto, sqlmap, ...• für spezielle Aufgaben
Motivation
Warum noch ein Tool?
Motivation
Kosten/Nutzen-Verhältnis von (kommerziellen) automatisierten Tools zu hoch!• Typische Nachteile vollautomatisierter Tools, z.B.
Logik-Fehler, Parameter-Encodings, ...
• manuelle „Begehung“ der Applikation trotzdem notwendig
Vorteile von automatisierten Tools• Einfache Bedienung, Reporting, zentrales
Management, QA-Schnittstellen, ...
pay() if pentester.needsFeature?(feature)
Motivation
Fehlende Transparenz
• Check-Methoden werden „geheim“ gehalten
• Zuviel „Voodoo“
Motivation
Freie Tools besitzen meist kein Session-Management• Erneutes Einloggen notwendig
• Mühsames kopieren der SessionID
Anpassen von Tools oftmals schwierig• Fehlender Source-Code
• Entwicklungsumgebung/Compiler notwendig
• Teilweise umständlich und unflexibel, z.B. XML
Motivation
Freie Tools haben oft nur begrenzte automatisierte Funktionen
• CustomError-Pages werden nicht erkannt
• Fehlende Authentifizierung, z.B. NTLM
• Kein Forwarding-Proxy
• …
Vorteile quell-offener Tools• Leistungsfähigkeit und Grenzen können
eingeschätzt werden
• Können schnell an neue Anforderungen angepasst werden
Vorteil von Skriptsprachen• Code kann direkt betrachtet und angepasst
werden
• Keine Entwicklungsumgebung notwendig (z.B. JDK)
Motivation
Copyright siberas 2010
Persönliche Motivation
No Java please!
Aufräumen eigener Skript-Sammlung• Zusammenfassen, Optimieren von vielen Jahren Arbeit
FUN • Ruby Coding Exercise – Ruby rocks!
• GUI Programmierung
gui_coding_fun_factor = experience * rand(1000)
Pro‘s and Con‘s
Copyright siberas 2010
Kommerzielle Scanner
Freie Scanner
Kosten -(-) ++SessionManagment ++ -Automatisierung ++ oErweiterbarkeit o +
Transparenz - ++
Ansatz: Vorteile beider „Welten“
Fokus: semi-automatisierte Penetrationstests
• UI für manuelles Testen optimiert
• Automatisierung von typischen Aufgaben
• Einfach zu erweitern
• Framework stellt alle elementaren Funktionen bereit, z.B. En-Decoder, Parser, Shaper, …
Umsetzung
Ruby, Ruby, Ruby, ...• http://www.ruby-lang.org
FXRuby für GUI• Ruby-Port von Fox-Toolkit
http://www.fxruby.org
Plattformunabhängig• (FX)Ruby für Windows, Linux, MacOS, ...
Entwicklungsplattform Windows• Wird auch unter Linux (Backtrack) getestet
Zielgruppe
Primär für professionelle Pentester!• Idealerweise mit Ruby-Kenntnissen
Auch geeignet für Entwickler, Admins,... - Basis-Checks einfach durchzuführen
- Kurze Beschreibung der Schwachstellen sowie Maßnahmenempfehlung
Kein Angriffswerkzeug!• Keine Exploitmodule in Open-Source-Version
Überblick zentrale Komponenten
Project
GUI
SCANNER
Manual Request
Passive Checks
Active Checks
Plugins
IProxy
Fuzzer
Komponente: GUI
Für manuelle Tests optimiert
• Hotkeys zum schnellen Suchen, En-Decodieren, Navigieren
• One-Click En-Decoder
• Umfangreiche Filter Funktionen
• Übersichtliche Darstellung
• Schnelle Analyse der Funktionsweise
Komponente: GUI
TreeViewfür
‚Findings‘ und
‚Site-Structure‘
Request und Response-Viewer
ConversationTable
Komponente: I(nterceptor)Proxy
Klassische Proxy-Funktion
Interceptor• Abfangen und Manipulieren von Requests/Responses
Pass-Through• Server-Antwort wird direkt an Browser durchgereicht
• Einstellbar: Content-Type/Content-Length
• Applikation lässt sich flüssig bedienen!
Pseudo-WebServer• Z.b für HTML-Preview
Komponente: Scanner
Multi-Threaded• In Ruby1.8 nur pseudo Threads
Smart-Scan-Funktion• Reduziert Anzahl von Requests
• Ähnliche URLs werden zusammengefasst
• Berücksichtigt „Non-Unique-Parameter“• Z.B. action=addUser oder function=showFile
Steuert Active-Checks
Komponente: Scanner
Feingranulare Definition des Target-Scopes
• Site (host:port)
• Root-Path
• Exclude-Patterns
Session-Management
• Erkennt Logout
• Kann (Re-)Login automatisiert durchführen
Komponente: Fuzzer
Automatisierter Request-Builder
• Sammeln von Cookies
• Enumerierung von IDs, Benutzernamen, …
• Brute-Forcing
Komponente: Fuzzer
Multi-Tag
• Platzhalter
Multi-Generator
• Datengenerator (Counter, File, List)
Multi-Action
• Modifiziert Daten (z.B. Encodings)
Multi-Filter
• Trigger- und Match-Filter, z.B. für Cookies
Komponente: Fuzzer
25
Komponente: Manual Request Editor
Automatisierter Login
Update der Session-Informationen
Update von One-Time-Tokens
Request-History
Differ
QuickScan
• Gezieltes Scannen einer URL
26
Komponente: Manual Request Editor
Komponente: Active Checks
Werden über Scanner gesteuert
Dienen zum aktiven Testen• SQL-Injection
• XSS
• ...
Gute Balance zwischen Einfachheit/Flexibilität• Nur mit Skript-Sprachen möglich!
• Einige Hersteller haben eigene (Skript-)Sprachen, oder nutzen JavaScript
Komponente: Active Checks
Aktuelle Checkliste (13):
+ Dirwalker
+ Fileextensions
+ Http_methods
+ Domino_db
+ Lfi_simple
+ Jboss_basic
+ Its_commands
+ Its_services
+ Its_service_parameter
+ Its_xss
+ Sqli_simple
+ Sql_boolean
+ Xss_simple
Komponente: Passive Checks
Grep-Style-Checks• Pattern-Matching
Identifiziert Schwachstellen• Z.B. Cookie-Security, unverschlüsselte Anmeldung,
...
Extrahiert hilfreiche Informationen• Z.B. DOMxss, Email-, IP-Adressen, ...
Komponente: Passive Checks
Aktuelle Checkliste (14):
+ Cookie_options
+ Cookie_xss
+ Detect_code
+ Detect_fileupload
+ Detect_infrastructure
+ Dirindexing
+ Disclosure_emails
+ Disclosure_ipaddr
+ Filename_as_parameter
+ Hotspots
+ Multiple_server_headers
+ Possible_login
+ Redirectionz
+ Redirect_url
Komponente: Plugins
Für individuelle Tests• Spezielle Einstellungen
• Eigene optimierte GUI
• Z.B. site-spezifische Checks, wie beispielsweise SSL-Cipher
Framework-Funktionen und Schnittstellen• listSites, listDirs, ...• SessionManagement• Scanner
Plugin: SSL-Checker
Prüft unterstütze SSL-Ciphers
• Mittels vollständigen HTTP-Requests
WATOBO Highlights
Session Management
One-Time-Token
Ruby-In-Ruby
HTML-Preview
Highlight: Session Management
Copyright siberas 2010
[‚(ASPSESSIONID)\w*=([0-9a-zA-Z]*)(;|&)?‘,
‚(PHPSESSID)=([0-9a-zA-Z]*)(;|&)?‘,
‚(MYSAPSSO2)=([0-9a-zA-Z.=%]*)(;|&)?‘
]
(PHPSESSID)=([0-9a-zA-Z]*)(;|&)?
MatchGroup 1 = SID-Name MatchGroup 2 = SID-Wert
SID-Patterns: Array von RegEx-Ausdrücken
zum Erkennen von SID-Namen und SID-Werten
Highlight: Session Management
13 vordefinierte Patterns können frei definiert werden Header und Body wird analysiert von Request und Response nur text/*-Content-Types => Geschwindigkeit gilt für Session-IDs in Cookies und URLs
Highlight: Session Management
Beispiel: (PHPSESSID)=([0-9a-zA-Z]*)(;|&)?
Highlight: Session Management
Copyright siberas 2010
{
‚PHPSESSID‘ => ‚deadbeef‘,
‚ASPSESSIONID‘ => ‚ a0b1c2….‘
}
SID-Cache: Speicher der aktuellen SessionIDs
Intern als Ruby-Hash
Highlight: Session Management
Copyright siberas 2010
{
‚PHPSESSID‘ => ‚deadbeef‘
}
[
‚(ASPSESSIONID)\w*=([0-9a-zA-Z]*)(;|&)?‘,
‚(PHPSESSID)=([0-9a-zA-Z]*)(;|&)?‘,
‚(MYSAPSSO2)=([0-9a-zA-Z.=%]*)(;|&)?‘
]
Update Request SID
1. Check if SID-Pattern match request
GET http://192.168.24.201/watobo/simple_xss.php?input=ababa HTTP/1.1
Host: 192.168.24.201
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1)
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Cookie: PHPSESSID=a3a395d38aefee76e41cce2535332f24
Connection: Close
Proxy-Connection: Close
Accept-Encoding: None
Highlight: Session Management
Copyright siberas 2010
{
‚PHPSESSID‘ => ‚deadbeef‘
}
[
‚(ASPSESSIONID)\w*=([0-9a-zA-Z]*)(;|&)?‘,
‚(PHPSESSID)=([0-9a-zA-Z]*)(;|&)?‘,
‚(MYSAPSSO2)=([0-9a-zA-Z.=%]*)(;|&)?‘
]
Update Request SID
1. Check if SID-Pattern match request
2. Check if Cache has new SID
GET http://192.168.24.201/watobo/simple_xss.php?input=ababa HTTP/1.1
Host: 192.168.24.201
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1)
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Cookie: PHPSESSID=a3a395d38aefee76e41cce2535332f24
Connection: Close
Proxy-Connection: Close
Accept-Encoding: None
Highlight: Session Management
Copyright siberas 2010
Update Request SID
1. Check if SID-Pattern match request
2. Check if Cache has new SID
3. Update SIDGET http://192.168.24.201/watobo/simple_xss.php?input=ababa HTTP/1.1
Host: 192.168.24.201
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1)
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Cookie: PHPSESSID=deadbeef
Connection: Close
Proxy-Connection: Close
Accept-Encoding: None
{
‚PHPSESSID‘ => ‚deadbeef‘
}
[
‚(ASPSESSIONID)\w*=([0-9a-zA-Z]*)(;|&)?‘,
‚(PHPSESSID)=([0-9a-zA-Z]*)(;|&)?‘,
‚(MYSAPSSO2)=([0-9a-zA-Z.=%]*)(;|&)?‘
]
Anti-CSRF Mechanismus
• aka SessionRiding
Ähnlich zu einfachem SessionManagement
• hier Token-Cache und Token-Patterns
Request-Bezogen!
Token verliert nach Nutzung die Gültigkeit
• Sofern es richtig implementiert wurde ;)
Highlight: One-Time-Tokens
Copyright siberas 2010
Meist 2 Patterns notwendig!
• tokens werden oftmals in Formularfeldern ausgestellt
Highlight: One-Time-Tokens
Copyright siberas 2010
Highlight: Ruby-in-Ruby
Einbinden von Ruby-Code
Request-Editor: spezielle Tags (%%)• %%“A“*10%% => AAAAAAAAAA
Fuzzer: Code-Blocks (Procs)
Nützlich für die Erzeugung von• vielen Zeichen, Headern, ...• Binaerzeichen, Konvertierung, Berechnungen, ...• Daten aus verschiedenen Quellen, z.B. Dateien
Highlight: Ruby-in-Ruby
Manual Request Editor: Including Binary-Files
Highlight: HTML-Preview
HTML-Preview sehr hilfreich• Doku-Screenshots, schnelle visuelle Analyse
FXRuby besitzt kein HTML(WebKit)-Widget ..., aber Browser gibt‘s auf jedem System
• IE, Firefox
Browser-Steuerung mittels JSSH (Firefox <3.6) und Win32OLE (IE)• http://www.croczilla.com/bits_and_pieces/jssh/
NEU!!! Firefox-Driver mittels Selenium• http://seleniumhq.org• Evtl. auch Chrome möglich
C:\watobo>ruby start_watobo.rb
znow@bt:watobo#ruby start_watobo.rb
Demo
Copyright siberas 2010
Dateiname <-> Klassenname
• Nur erstes Zeichen gross schreiben!!!
• Dateistruktur
• SourceCode
HowTo: Eigene Module
Copyright siberas 2010
module Watobo
module Modules
module Active
module Jboss
class Jboss_basic < Watobo::Core::ActiveCheck
C:.
├───modules
│ ├───active
│ │ ├───jboss
generateChecks erzeugt die Test-Requests Für jeden Test-Request wird eine Block-Funktion
(Ruby-Proc) erzeugt Block liefert Request und Response zurück
How To: Eigene Module
Copyright siberas 2010
def generateChecks(chat)
:
checker = proc {
status, test_request, test_response =
fileExists?(test, :default => true)
return test_request, test_response
}
yield checker
end
Current Version: 0.9.7
Lines Of Code: ca. 20.000
Ruby Files: 110
ca. 5000 Downloads
Bestandteil von Pentest Linux-Distributionen• BackTrack 4
• SamuraiWTF
Facts
Copyright siberas 2010
Road-Map
Dokumentation
• Videos, rdoc
Installer
• z.B. Nullsoft (http://nsis.sourceforge.net)
Ruby 1.9 Support
code, code, code, …
• entwickeln eigener Module, Plugins-> einfacher als man denkt
• RUB-Repo?
„Spread The Word“
Feedback!!!
How To Contribute?
Copyright siberas 2010
FRAGEN?