Synecta SecCheck
Transcrição
Synecta SecCheck
Synecta SecCheck IPA 2003 Christian Burri Technische Dokumentation 2003 by Synecta Informatik AG VERTRAULICHES DOKUMENT – NUR ZUR INTERNEN VERWENDUNG Inhaltsverzeichnis 1. Danksagung........................................................................................................... 3 2. Einleitung................................................................................................................ 4 3. Systemarchitektur................................................................................................... 5 4. Systemumgebung................................................................................................... Plattform, Betriebssystem, Netzwerkkonfiguration............................................... Windows Update, Automatic Update………………………………………………... Einstellungen, Sec Policy, User Rights, Default Shares, Stack Hardening…...… Windows Security Options, Windows Services………………………...………….. 7 7 8 9 10 5. Zusätzliche Softwarepakete................................................................................... 11 6. Installation / Konfiguration Softwarepakete......................................................... 13 7. Abschließende Systemeinstellungen................................................................... 15 8. Entwicklungswerkzeuge......................................................................................... 16 9. Datenbanken........................................................................................................... 17 10. CGI-Tags.................................................................................................................. 18 11. Die CGI-Applikationen............................................................................................ 19 12. Der Gesamtablauf................................................................................................... 20 13. Abschließende Bemerkungen................................................................................ 21 14. Referenzen............................................................................................................... 22 Anhang A Datenbankdokumentation B Quellcode seccheck.cgi C Quellcode secscan.cgi D Beispielbericht Vertraulich Seite 2 13.05.2013 Danksagung Mein persönlicher Dank für mentale Unterstützung geht an dieser Stelle an: d1cer, ampoz, b|ueberry, K|mberly, GUIN, nox, pingsweep, ALK und an fonerwall: Spezielles Dankeschön an ziricon für die Mithilfe bei der Erstellung der Port-Datenbank. Danke an folgende Coder, deren Komponenten ich in meinem Projekt verwende: Kevin O’Brien, Fredrik Qvarfort, David Midkiff, Randy Birch und Phil Fresle. Vielen Dank auch an die Entwickler der eingesetzen Kommandozeilenapplikationen: Fyodor, NTSleuth und Craig Peacock. Vertraulich Seite 3 13.05.2013 Einleitung Mit zunehmender Verbreitung von PC’s mit Internet-Anschluss im generellen, und der steigenden Verfügbarkeit von Breitbandverbindungen im speziellen, steigt die potentielle Bedrohung aus dem weltweiten Datennetz immer weiter an. Wo in der Realen Welt Diebe, Räuber und skrupellose Gangster lauern, um uns unser Hab und Gut abzunehmen, sehen wir unsere Computersysteme und Daten den sogenannten Script Kiddies und Crackern in der Virtuellen Welt ausgeliefert. Bewaffnet mit den allerneusten 0day-Exploits und Scannern jagen sie durch die endlosen Weiten des Cyberspace, wie Schakale auf der Suche nach einem Kadaver, den sie ausweiden können. Ist die Gelegenheit günstig, fallen Sie über jedes ungeschützte System her. Auch wenn es sich dabei nicht um einen bekannten Webserver handelt, und sich ein „Defacement“ also nicht wirklich lohnt: jedes System ist gut genug; und sogar von einem gehackten Windows-Rechner aus kann man Angriffe auf weitere Systeme starten. Sehr beliebt in der Movie-Szene ist zur Zeit das Scannen nach ungesicherten Windows-Rechnern, um auf diesen einen XDCC-Bot (eine Art Fileserver, über IRC zu erreichen) zu betreiben. Selbstverständlich dienen diese XDCC-Bots dann dazu, illegal kopierte Spielfilme oder ähnlich zweifelhaftes Material zu verbreiten. Ebenso werden ungeschützte oder ungenügend gesicherte Rechner auch dazu missbraucht, DenialOf-Service-Attacken oder andere Hackerangriffe gegen dritte Netzteilnehmer zu starten. So gibt es einen Exploit, welcher gefundene Microsoft IIS-Server mit Unicode-Bug benutzt, um Ping Floods gegen eine bestimmte IP-Adresse auszuführen. Den allermeisten dieser Angriffe ist aber gemeinsam, dass sie sich relativ primitiven Techniken bedienen, um einen Rechner zu „übernehmen“: - Kein Passwort definiert für das Administrator-Konto Schwache Administrator-, Benutzer- oder Share-Kennwörter LAN-Dienste im Internet verfügbar (Bsp. NetBIOS) Nicht eingespielte Security-Patches und Updates Fehlkonfigurationen in Serverdiensten ... Das Problem bei diesen Sicherheitslücken ist, dass sie hauptsächlich dort Auftreten, wo oftmals keine - oder nur ungenügende - Kenntnis der Problematik vorhanden ist: Beim Endanwender. Synecta Informatik AG möchte mit SecCheck auch dem nicht-versierten Internet-Anwender die Möglichkeit geben, sein eigenes System einer grundlegenden Sicherheitsprüfung zu unterziehen. Die Prüfung fokussiert –marktgerecht- auf Windows-basierte Betriebssysteme, und SecCheck greift dabei auf eine Reihe von bekannten und bewährten Security-Tools zurück. Um Synecta SecCheck zu nutzen, benötigt der Anwender lediglich einen Browser und eine gültige EMail-Adresse. Die Bedienung gestaltet sich dabei äusserst einfach, da SecCheck den Benutzer schrittweise (Im Assistenten-Stil) durch den gesamten Vorgang leitet. Das Ergebnis wird dem Anwender als deutschsprachiger HTML-Bericht am Bildschirm präsentiert, was im Gegensatz zu vielen vergleichbaren Produkten steht, die sich meist auf englische Sprache beschränken. Christian Burri, April 2003 Vertraulich Seite 4 13.05.2013 Systemarchitektur Synecta SecCheck ist als CGI-Applikation aufgebaut. Dies heisst, das der Scanner einen Webserver zum Betrieb benötigt. Wir verwenden in unserer Lösung den Apache-Webserver [1], als Betriebssystem kommt Windows 2000 Advanced Server (US-Version) zum Einsatz. Eine CGI-Applikation wird prinzipiell auf einen Request vom Browser hin durch den Webserver ausgeführt, und kommuniziert mit diesem über die CGI-Schnittstelle. Die CGI-Applikation erzeugt eine Antwort, welche über die CGI-Schnittstelle zurück an den Webserver, und von diesem an den Browser geleitet wird. Die Standard-CGI-Schnittstelle [2] bedient sich dabei den STDIO-Kanälen, sowie einigen Umgebungsvariablen. CGI-Programme oder –Skripte laufen auf der Servermaschine ab. Der Webserver schickt eingehende Daten via STDIN (sowie Umgebungsvariablen) an das CGI-Programm. Dieses sendet seine Ausgabe via STDOUT und STDERR an den Webserver zurück. Nur der Webserver kommuniziert hierbei mit dem Client-Browser. Es existiert keine direkte Verbindung zwischen Client und CGI-Programm. Während man für CGI-Applikationen üblicherweise Skriptsprachen wie Perl, Python oder PHP verwendet, handelt es sich bei den SecCheck-CGI’s um kompilierte Executables. Dies bringt erhebliche Performancevorteile mit sich, da Executables im Gegensatz zu Skripten nicht zur Laufzeit interpretiert werden müssen. Der Nachteil der schwierigeren Portierbarkeit fällt hier nicht ins Gewicht, da weitere Microsoft-spezifische Technologien verwendet werden, und eine Portierung ohnehin nicht vorgesehen ist. Die SecCheck-Applikation selbst ist unterteilt in mehrere CGI-Programme, die jeweils unterschiedliche Teilaufgaben ausführen: seccheck.cgi secscan.cgi secadmin.cgi seccheckd.exe Registrierungs- und Login-Funktion Scanner und Report Generator Administration Maintenance Daemon / Service Im Hintergrund der CGI-Applikationen stehen drei Datenbanken: seccheck.mdb Speichert Konfiguration und HTML seccheck-users.mdb Speichert User- und Scan-Daten seccheck-ports.mdb Enthält Informationen über TCP- und UDP-Ports Alle Datenbanken sind im Microsoft Access Format gehalten, und werden an die CGI-Programme mittels Microsoft Jet-Engine / Data Access Objects [3] angebunden. Dies hat den immensen Vorteil, keine SQL-Server-Lizenz vorauszusetzen. Grundsätzlich kann bei der gewählten Architektur gänzlich auf einen Datenbankserver verzichtet werden, was auf der Scannermaschine einen zusätzlich laufenden Service einspart und somit das Verwundbarkeitspotential reduziert. Anmerkung: Es ist zu Beachten, dass Administrations-CGI-Programm und Maintenance-Daemon aus zeitlichen Gründen nicht Gegenstand dieser IPA sein konnten, und deshalb in der vorliegenden Version nicht implementiert wurden. Aus diesem Grund kommt als Datenbank-Editor vorläufig Microsoft Access 2000 zum Einsatz. MDB ist das native Datenbank-Format für Access. Vertraulich Seite 5 13.05.2013 Vertraulich Seite 6 13.05.2013 Die Systemumgebung Dieser Abschnitt beschreibt Art und Konfiguration der Systemumgebung (Hardware und Betriebssystem). Bei der Betriebssystemkonfiguration werden zu tätigende Einstellung beschrieben. Wird eine Einstellung nicht erwähnt, so ist der Vorgabewert (Default) zu verwenden. Installation Plattform Hardware Operating System Drivers IBM NetVista CPU: Pentium III 733MHz, RAM: 256MB, HD: 20GB, NIC: 10/100 Windows 2000 Advanced Server (US-English) IBM NetVista Driver Package (Video, Audio, LAN, Chipset) Betriebssystem Installationsparameter Locale Keyboard Hostname OS Admin Login OS Admin Pass Licensing Mode Win2k Components German (Switzerland), Set as System Default German (Switzerland) seccheck root XaNVi3R-1337 Per Server (250 Connections – irrelevant for our application) Accessories and Utilities Management and Monitoring Tools Script Debugger Terminal Services (Remote Admin Mode) Netzwerkkonfiguration Network Interface FQ Hostname IP Address Subnet Mask Default Gateway Protocol Bindings DNS Servers WINS Vertraulich Intel PRO/100 VE seccheck.synecta.ch 213.180.179.166 255.255.255.252 213.180.179.165 TCP/IP Network Monitor Driver 213.180.179.170 (synectabdc.synecta.ch) 213.180.179.171 (synectant.synecta.ch) 212.90.192.190 (ns2.cybernet.ch) Disable NetBIOS over TCP/IP Seite 7 13.05.2013 Windows Update OS Service Pack Internet Explorer Hotfixes Service Pack 3 Version 6, Service Pack 1 810847: Cumulative Patch for IE6 SP1 Q815021: Security Update (unspecified) 814033: Important Update (Windows Update) Q327696: Security Roll-up Package for IIS (unspecified) Q329115: Security Update (Certificate Validation Flaw) 810030: Security Update (Microsoft VM for Windows 2000) 329170: Security Update (Security Policies) 810649: Important Update (Windows Components) Q328310: Security Update (Remote Admin Compromise) 331935: Security Update (Denial Of Service Vulnerability) 810833: Security Update (Remote Admin Compromise) 814078: Security Update (Microsoft Jscript 5.6) Q329414: Security Update (MDAC 2.5) Q329834: Security Update (BOF Vulnerability in PPTP) Q324096: Security Update (SmartHTML Interpreter) Q323172: Security Update (Flaw in Certificate Enrollment) W326830: Security Update (BOF Vulnerability in NetBIOS) Q326886: Security Update (Flaw in Network Con Mgr) Q324380: Security Update (Flaw in MS RDP Crypto) Q323255: Security Update (BOF Vuln. in HTML Help) MS02-008: Security Update (MSXML Disclosure Vuln.) 811630: Important Update (Windows 2000 HTML Help) 813951: IE6 SP1 Update (Authentification Flaw) 322913: Recommended Update (WM_TIMER Patch) Q322842: Recommended Update (GDI Thread Deadlock Patch) 816093: Security Update (Microsoft Virtual Machine) Windows Automatic Update Notification Settings Vertraulich Set “Automatically download updates, and install on specified schedule” (for unattended operation). Set Schedule to “Every day at 3:00 AM” Seite 8 13.05.2013 Generelle Windows-Einstellungen Paging File Settings Max Registry Size System Failure App. Response Other Settings [C:] 384MB – 1024MB 64MB Write Debug Info: None Send Administrative Alert: No Automatically Reboot: Yes Optimize for: Applications Default Values Windows Auditing Policy Account Logon Account Mgmnt Logon Events Policy Change Privilege Use System Events Other Settings Success, Failure Success, Failure Success, Failure Success, Failure Failure Failure Default Value (No Auditing) Windows User Rights Assignment Bypass Traverse Checking Deny Access to Computer from Network Log On Locally Other Settings Administrators, Backup Operators, Power Users, Users (Remove “Everyone”) SECCHECK\Guest SECCHECK\IUSR_SECSCAN, Administrators, Backup Operators, Power Users, Users, SECCHECK\TSInternetUser (Remove “Guest”) Default Values Windows Default Shares C$ Do Not Share This Folder TCP/IP Stack Hardening [4] Registry Key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters SynAttackProtect TcpMaxHalfOpen TcpMaxHalfOpenRetried PerformRouterDiscovery EnableICMPRedirect KeepAliveTime EnableDeadGWDetect NoNameReleaseOnDemand 2 (Strong) 200 (Max 200 Half Open Connections) 140 (Max 140 Half Open Retrying Connections) 0 (Disabled, Key is in Interfaces\<interface>) 0 (Disabled) 300000 (milliseconds = 5 minutes) 0 (Disabled) 0 (Disabled) All Values are decimals of Type REG_DWORD Vertraulich Seite 9 13.05.2013 Windows Security Options Restrictions for Anonymous Connections Audit Use of Backup and Restore Privilege Clear Page File when System shuts down Digitally Sign Server Communications (when possible) Do not display last Username in Logon Screen Msg Text for Users attempting to Logon Msg Title for Users attempting to Logon Rename Admin Account Rename Guest Account Secure Channel Require strong session key Unsigned Driver installation Unsigned Non-Driver installation Other Settings No Access without explicit Anonymous permissions Enabled Enabled Enabled Enabled This is a private computer system. Unauthorized Access is strictly prohibited. Any connection attempts will be logged and/or monitored. Unauthorized Access will be prosecuted to the maximum extent possible by applicable law. RESTRICTED ACCESS! root Guest_User Enabled Warn but allow installation Warn but allow installation Default Values Windows Services Alerter DHCP Client FTP Publishing Svc WWW Publishing IIS Admin Svc IPSec Policy Agent License Logging Messenger Print Spooler RAS Auto Con Mgr RAS Con Manager Remote Registry Svc SNMP Service SNMP Trap Service Telephony Telnet Other Services Vertraulich Manual Disabled Disabled Disabled Disabled Manual Disabled Disabled Manual Manual Manual Disabled Disabled Disabled Disabled Disabled Default Value Seite 10 13.05.2013 Zusätzliche Softwarepakete Dieser Abschnitt beschreibt alle zusätzlichen Softwarepakete, die ausser dem Betriebssystem auf der Scanner-Maschine installiert werden. Es wird jeweils eine Kurzinfo zu jedem Softwarepaket aufgelistet, mit Quellenangabe und Versionsnummern. Alle Applikationen wurden auf der Scannermaschine im Verzeichnis c:\Software hinterlegt. Web Server Application Source Version Filename Size Author FoxServ (Apache, mySQL, PHP, Perl, Python) http://foxserv.net FoxServ 3.0 gold FoxServ-3.0.exe 34’711’426 Bytes FoxServ Development Team Application Source Version Filename Size Author WinZIP http://www.winzip.com WinZIP 8.1 SR-1 winzip81.exe 1’897’672 Bytes WinZip Computing, Inc. Application Source Version Filename Size Author nmap for Windows http://www.nmap.org 3.20-win32 (stable) nmap-3.20-win32.zip 205’689 Bytes Fyodor Archiver/Packer Portscanner WinPcap Packet Drivers Driver Source Version Filename Size Author Vertraulich WinPcap http://winpcap.polito.it 3.0 WinPcap_3_0.exe 440’557 Bytes NetGroup, Politecnico Di Torino Seite 11 13.05.2013 Antivirus Application Source Version Filename Size Author Serial Number AVG AntiVirus http://www.grisoft.com 6.0.470 (Free Edition) Avg6467fu_free.exe 5’683’200 Bytes Grisoft Inc. AVG-1-7404773-IGA SCP Client Application Source Version Filename Size Author WinSCP http://winscp.vse.cz 2.2 Build 122 WinSCP2.exe 681’984 Bytes Martin Prickl Zeitsynchronisation Application Source Version Filename Size Author Tardis NT http://www.kaska.demon.co.uk/ 1.4 nmapNTsp1.zip 1’253’750 Bytes Mingham Smith H.C. NetBIOS-Enumerator Application Source Version Filename Size Author NBTEnum http://www.packetstormsecurity.nl/ 3.0 NBTEnum30.zip 670’341 Bytes NTSleuth SMTP-Mail-Submitter Application Source Version Filename Size Author Vertraulich bmail http://www.packetstormsecurity.nl/ 1.05 Bmailv105.zip 17’518 Bytes Craig Peacock Seite 12 13.05.2013 Installation/Konfiguration Softwarepakete WinZIP Install Type Install Path Settings Guided Installation (Setup Wizard) C:\Program Files\WinZIP Start with WinZIP Classic AVG AntiVirus Install Type Install Path Components Automatic Update Resident Shield Configuration EMail Scanner Configuration Update Manager Configuration Other Settings Guided Installation (Setup Wizard) C:\Program Files\Grisoft\AVG6 AVG Resident Shield: Enabled AVG E-Mail Scanner: Disabled AVG Control Center: Enabled Enabled, Server www.grisoft.com Enable “Use heuristics” Disable “Confirmation” (for unattended operation) Disable “What to do next” (for unattended operation) Disable “Check incoming messages” Disable “Check outgoing messages” Set “Update will start at” to 1:30 AM Set “Update if DB is older than” to 2 days Set “If not successful, then repeat in” to 1 day Keep default values nmap 3.20 Install Type Install Path Additional Steps PCap Packet Driver Other Settings ZIP file, for manual extraction C:\Program Files\nmapNT\ Rename nmapnt.exe to nmap.exe Windows 2000 Version of PACKET.DLL and PACKET.SYS (See WinPcap Documentation; reboot is sometimes required) None Tardis NT Install Type Install Path Additional Steps NTP Time Servers Additional Settings ZIP file, for manual extraction C:\WinNT\System32\ Follow Instructions in readme.txt from ZIP archive swisstime.ethz.ch time.ethz.ch time.unibe.ch Enable „Notify other applications when time is set“ Adjust “How often the time is set” to 5 minutes Enable “Log error messages” WinSCP Install Type Install Path Settings Vertraulich Executable, No installation required C:\Program Files\WinSCP None Seite 13 13.05.2013 FoxServ Install Type Install Path Administrator EMail Server Port Apache Svc Apache Monitor Svc MySQL Svc Troubleshooting Note Guided Installation (Setup Wizard) C:\FoxServ [email protected] 80 (TCP) Yes Yes No All attempts to install ApacheMonitor as service failed. The reason is unknown. Workaround: Put a shortcut to ApacheMonitor.exe into Startup folder (Service functionality is not really required anyways). Apache Configuration File Config File Location Disable PHP C:\FoxServ\Apache\conf\httpd.conf Comment out LoadModule directive: # LoadModule php4_module C:\FoxServ\php\sapi\php4apache2.dll Disable ISAPI Comment out LoadModule directive: # LoadModule isapi_module modules/mod_isapi.so Disable User Folders Comment out LoadModule directive: # LoadModule userdir_module modules/mod_userdir.so Comment out UserDir directive: # UserDir "My Documents/My Website" Set Hostname Edit ServerName directive: ServerName seccheck.synecta.ch:80 Prevent Web Users from Downloading MDB Files Add a <Files> Section: <Files ~ "^\.mdb"> Order allow,deny Deny from all </Files> Edit CustomLog directive: Enable Combined Logs CustomLog logs/access.log combined Disable Server Signature/Banner ServerSignature Off Edit CGI Script Alias Edit ServerSignature directive: Edit ScriptAlias directive: ScriptAlias /cgi/ "C:\FoxServ\www\cgi-bin/" Achtung: In C:\FoxServ\www zusätzlich die Verzeichnisse phpMyAdmin und docs löschen! Alle nicht speziell erwähnten Anwendungen sind gemäss Default-Parameter zu installieren. ZIP-Distributionen von Kommandozeilentools, welche manuell extrahiert werden müssen, können in einen temporären Ordner entpackt werden. Siehe auch nächster Abschnitt. Vertraulich Seite 14 13.05.2013 Abschliessende Systemeinstellungen Dieser Abschnitt beschreibt zusätzlich notwendige Konfigurationsschritte, um den SecCheck-Scanner zu betreiben. SecCheck User Account Der Scanner benötigt einen eigenen User-Account: SECCHECK_USR User mittels lokaler Benutzerverwaltung erzeugen „Change Password At Logon“-Flag abschalten „Password Never Expires“ einschalten „Allow Logon To Terminal Service“ abschalten Ein sicheres Passwort vergeben und unten Notieren - SECCHECK_USR Paßwort: __KL432rew78645tw___________ Der Apache-Service muss hernach via Services-Applet gestoppt, und der Service-User muss geändert werden. Dazu im Services-Applet die Eigenschaften des Apache-Services aufrufen, und im Register „Log On“ den Apache Service-Account von „Local System Account“ umschalten auf „This Account“ und den Account .\SECCHECK_USR angeben. Es muß noch das Paßwort für den SECCHECK_USR angegeben werden, danach auf „Apply“ clicken. Das Betriebssystem führt die Änderung aus, und gibt dem SECCHECK_USR-Account das Recht, als Service anzuloggen. Dies wird mittels einer Messagebox angezeigt, welche mit OK zu bestätigen ist. Sind die Änderungen durchgeführt, kann der Apache-Service wieder gestartet werden. Anmerkung: Da der SYSTEM-User aus Sicherheitsgründen keinen Zugriff auf Network-Shares hat, sollte SecCheck (und damit der Webserver) nicht als SYSTEM ausgeführt werden. Läuft SecCheck als SYSTEM, können beim NetBIOS-Passworttest falsche Negative resultieren [5]. SecCheck Verzeichnisse Es werden ausserdem drei Verzeichnisse benötigt. Da diese Verzeichnisse nicht zum öffentlichen Zugriff bestimmt sind, werden sie ausserhalb des Document Root des Apache Servers erzeugt: Applikationen Daten Temporär C:\SECCHK_APPS\ C:\SECCHK_DATA\ C:\SECCHK_TEMP\ Von den CGI’s verwendete CLI-Tools Datenbanken und andere Konfigurationsdateien Zur Zwischenablage von Dateien Vollzugriff auf diese Verzeichnisse (und deren Unterverzeichnisse und Objekte) ist für die User SECCHECK_USR, Administrator und SYSTEM vorgesehen. Die Gruppe EVERYBODY sollte nicht Zugriffsberechtigt sein. Das Applikationsverzeichnis beinhaltet alle von den SecCheck-CGI’s verwendeten Kommandozeilenapplikationen, und zwar jeweils in eigenen Unterverzeichnissen: nMap NBTEnum bMail .\nmap\ .\nbtenum\ .\bmail\ Portscanner und dessen Hilfsdateien NetBIOS-Enumerator SMTP-Mail-Submitter In diese Verzeichnisse sind die jeweiligen Kommandozeilen-Applikationen direkt hineinzukopieren. Im Fall von nmap müssen alle zusätzlichen Files mitkopiert werden. Vertraulich Seite 15 13.05.2013 Entwicklungswerkzeuge Die bei der Entwicklung von SecCheck verwendeten Werkzeuge werden hier aufgelistet: CGI-Applikationen Visual Basic 6 (Enterprise Edition) Microsoft Standart-RAD-Entwicklungswerkzeug in der Version 6.0. Bestandteil von Visual Studio 6. NLINK (C.A.P.) Erweiterung für Visual Basic 6. Erlaubt das kompilieren von Windows-Konsolenanwendungen direkt aus VB6 heraus. Aus privater Entwicklung (spacebitch.com softlabs [8]). Data Access Objects Microsoft Data Access Objects. Die Standard-Schnittstelle zu Microsoft Access-Datenbanken für Visual Basic-Programme. Enthalten in VB6 Enterprise. CGI4VB Public-Domain Library zur Unterstützung des CGI-Interfaces in Visual Basic Anwendungen. Wir benutzen eine leicht modifizierte Version (siehe Quellcode). Datenbanken Access 2000 Microsoft Access 2000 ist das Standart-OfficeDatenbankprogramm von Microsoft. Bestandteil von Office 2000 Premium Edition. HTML/Javascript Arachnophilia Bekannter Freeware-HTML-Editor. Verfügbar im Internet, bezogen via Tucows.com. Windows Terminal Services Microsoft Windows Terminal Services bieten Remote-GUI-Zugriff auf einen Windows-Rechner. Wurde während der Entwicklung intensiv verwendet zum Zugriff auf Scanner- sowie Testmaschine. Dient auch zur Fernwartung der Scannermaschine. Bestandteil von Windows 2000 Server und Advanced Server. WinSCP Der Freeware-SCP-Client für Windows stellt eine sichere Alternative zur Installation eines FTP-Servers dar. SCP wurde verwendet, um Dateien zwischen Entwicklungs- und ScannerMaschine zu übertragen (unter Zuhilfenahme eines vorhandenen Linux-Servers mit SSH-Dienst). Tools Vertraulich Seite 16 13.05.2013 Datenbanken Der genaue Aufbau der Datenbanken kann der MDB-Dokumentation im Anhang entnommen werden. An dieser Stelle soll nur Zweck und Inhalt der Datenbanken erläutert werden. Die Konfigurations-Datenbank (seccheck.mdb) Die secccheck.mdb-Datenbank speichert Text- , HTML-Vorlagen und Einstellungen ab. Die Textvorlagen beschränken sich in der vorliegenden Version auf Text und Betreffzeile des Passwort-Emails. Diese befinden sich in der Tabelle TBL_TEXT. Die CGI-Applikationen erzeugen die angezeigten HTML-Seiten on-the-fly. Dies bedeutet, dass für jede HTML-Seite eine Vorlage (Template) aus der Datenbank geladen wird, und bestimmte Elemente (hier CGI-Tags genannt) in der Vorlage -vor der Auslieferung an den Client-Browser zwecks Anzeige- mit aktuellen Daten ersetzt werden. Die Vorlagen befinden sich in der Tabelle TBL_HTML. Die dritte Tabelle, TBL_CONFIG, speichert Konfigurationsinformationen wie die EMail-Adresse des Scanner-Administrators, die DNS/IP-Adresse des Mailservers, den Mailserver-Port und ähnliches. Es gibt auch ein Flag, um den Scanner vorübergehend abzuschalten. Die User-Datenbank (seccheck-users.mdb) In der seccheck-users.mdb-Datenbank befindet sich die Benutzertabelle, sowie die Scan-Tabelle. Die Benutzertabelle, TBL_USERS, speichert benutzerspezifische Daten wie EMail-Adresse, Passwort, Session Key, Session Key Salt, sowie einige Timestamps. Die Tabelle TBL_SCANS speichert alle auf einen Scan bezogenen Daten ab. Dies beinhaltet Zeitstempel, Eigentümer des Scans (Verknüpfung mit der Benutzertabelle), die Resultate der durchgeführten Tests sowie einige weitere Attribute. Aus dem Inhalt der TBL_SCANS-Tabelle wird am Ende des Scans der HTML-Bericht erzeugt. Die Port-Datenbank (seccheck-ports.mdb) Die Port-Datenbank enthält Informationen zu TCP- und UDP-Ports: - ARIN Service Name Beschreibung Weiterführender Link (wenn Verfügbar) Sicherheits-/Gefahren-Index Diese Informationen werden zur Aus- und Bewertung der ausgeführten TCP/UDP-Portscans verwendet. Hinweis: die Port-Datenbank wurde zur Verfügung gestellt von spacebitch.com softlabs [8] Achtung: Damit SecCheck Zugriff auf die Datenbanken hat, ist es notwendig, die Datei MSDAO36.DLL in’s System32-Verzeichnis der Scannermaschine zu kopieren. Die DLL muss danach durch einen Aufruf von Regsvr32 in der Systemregistrierung eingetragen werden. Vertraulich Seite 17 13.05.2013 CGI-Tags Es gibt generell gültige (globale) CGI-Tags, welche grundsätzlich in jeder Vorlage verwendet werden können. Sie sind immer gültig, und können von der CGI-Applikation in jedem Fall sinnvoll ausgefüllt werden: $SCRIPT_URL $SESSION_KEY* $USER_ID* Die komplette URL der aktuellen CGI-Applikation Aktuell gültiger Session-Key Verschlüsselte User-Kennung (Email-Adresse) * Nur für angemeldete User innerhalb secscan.cgi gültig Ausserdem existieren in einigen Templates lokale Tags, welche nur für die jeweilige Vorlage Gültigkeit haben: $ERROR_REASON Fehlermeldungstext Grund oder Fehlerbeschreibung AccountExists $USER_EMAIL Benutzer-Email-Adresse im Klartext ConfirmScan $TARGET_IP Zieladresse des Scans SetScanParameters $TARGET_IP Zieladresse des Scans ErrorPage $ERROR_MESSAGE ScanRunning $PROGRESSBAR_IMAGE ScanReport $REPORT_DATE Vertraulich Name der Progressbar-Grafik Datum der Berichterstellung $REPORT_TIME Zeit der Berichterstellung $USER_EMAIL Email-Adresse des Auftraggebers $TARGET_IP Ziel-IP, die gescannt wurde $TARGET_RDNS Reverse-DNS-Hostname des Zielrechners $TARGET_OS Nmap Operating System Guess $TARGET_UPTIME Nmap Target Uptime Guess $FIREWALL_INFO Firewall Detection Status $TARGET_TCP_PORTS Tabellenelemente für TCP-Portliste $TARGET_UDP_PORTS Tabellenelemente für UDP-Portliste $NETBIOS_NAME NetBIOS-Name des Zielrechners $ACCOUNT_LOCKOUT Account Lockout Threshold $NETBIOS_SHARELIST NetBIOS-Shares-Liste $NETBIOS_ACCOUNTLIST NetBIOS-Account-Liste $TARGET_PASSWORD_TABLE Tabellenelemente der Passwortliste $RECOMMENDATION Generelle Empfehlungen Seite 18 13.05.2013 Die CGI-Applikationen Wie bereits erwähnt, besteht SecCheck im wesentlichen aus drei CGI-Applikationen, wovon hier nur zwei beschrieben werden, da das dritte Modul gegenwärtig nicht implementiert ist. Hinweis: Einige Komponenten, die verwendet wurden, stammen von Planet Source Code [7]. Login / Registrations – CGI (seccheck.cgi) Das Login/Registrations-CGI dient als „Vordertüre“, es wird nach einem Aufruf des Scanners im Webbrowser angezeigt. Ein neuer Benutzer kann sich durch die Bekanntgabe seiner E-Mail-Adresse registrieren. Stimmt er den Nutzungsbedingungen zu, so erstellt seccheck.cgi einen neuen Eintrag für den User in der Userdatenbank. Ausserdem erzeugt seccheck.cgi das Paßwort für den neuen Benutzer, und verwendet anschließend bmail.exe, um das Paßwort dem Benutzer per Email zuzustellen. Achtung: Dieser Vorgang benötigt einen externen SMTP-Server. Der Benutzer kontaktiert daraufhin erneut das Login/Registrations-CGI und gibt seine EMail-Adresse und sein per Email erhaltenes Paßwort an. Das Login-CGI erzeugt daraufhin einen gültigen SessionKey für den User, und leitet diesen an das Scanner-CGI weiter. Scanner-CGI (secscan.cgi) Dies ist der eigentliche Security-Scanner und gleichzeitig der Report-Generator. Der Scanner verlangt nochmals eine Bestätigung der Prüfung, und erlaubt anschließend, zwischen abgesichertem oder komplettem Scan zu wählen. Der Abgesicherte Modus dient nur zur Problemvermeidung, und sollte nach Möglichkeit nicht verwendet werden. Im Abgesicherten Modus verzichtet SecCheck auf einen UDP-Portscan, und außerdem werden bei der NetBIOS-Enumeration keine Paßwörter getestet. Beim TCP-Scan benutzt SecCheck im Abgesicherten Modus den gewöhnlichen TCP-Connect() Modus. Beim Vollständigen Scan hingegen wird ein SYN-Stealth TCP Portscan durchgeführt, kombiniert mit einem UDP-Scan und einer Paßwortanalyse bei der nachfolgenden NetBIOS-Enumeration. Der NetBIOS-Passworttest wird übrigens nur durchgeführt, wenn der Account Lockout Treshold auf null steht bzw. nicht definiert wurde. Dies ist eine Vorsichtsmaßnahme, um versehentlich gesperrte Benutzeraccounts zu vermeiden. Die Ergebnisse werden in der User-Datenbank zwischengespeichert (Tabelle TBL_SCANS), und anschließend vom Reporting-Modul (in secscan.cgi integriert) ausgewertet. Alle verfügbaren Informationen werden dem Benutzer im darauffolgenden Schritt am Browser im HTML-Format präsentiert. Wurde ein vollständiger Scan durchgeführt, gibt SecCheck auch einen Sicherheits-Index aus, welcher das Gefährdungspotential des geprüften Rechners in Zahlen zu fassen versucht. Grundsätzlich gilt dabei: je mehr Informationen der Scanner über den Zielrechner in Erfahrung bringen kann, desto höher wird der index ausfallen. Ein hoher Index steht somit für einen unsicheren Rechner, während ein niedriger Index einen sicheren Rechner kennzeichnet. Die Indexberechnung basiert auf dem Durchschnittswert der Klassifizierungen aller gefundenen Ports. Zusätzlich werden für bestimmte „Sicherheitsverstöße“ oder Fehlkonfigurationen Strafpunkte vergeben. Diese können relativer (keine Firewall gefunden ergibt einen 15% Penalty), oder absoluter Natur sein (kein Administratorpaßwort gibt 2 Extra-Strafpunkte). SecCheck gibt auch eine Liste von Empfehlungen aus, basierend auf gefundenen Sicherheitslücken und weiteren Scan-Ergebnissen. Vertraulich Seite 19 13.05.2013 Der Gesamtablauf Zur Registration muss der Anwender eine gültige Email-Adresse angeben. An diese schickt SecCheck das automatisch generierte Benutzerpasswort. Die Email-Registration soll helfen, allfälligem Missbrauch des Scanners vorzubeugen. Nach erfolgter Registration kann sich der Benutzer zum Scan anmelden. Daraufhin wird vom Benutzer eine Bestätigung für den anstehenden Scan verlangt. Erfolgt die Bestätigung, kann der Scantyp (Vollständig/Abgesichert) ausgewählt werden. Daraufhin wird der Scan gestartet, eine Fortschrittsanzeige erscheint. Nach Abschluss des Scans kann sich der Benutzer den HTML-Bericht mit den Prüfungsergebnissen anzeigen lassen. Vom Bericht aus kann der Scan wiederholt, oder aus dem System ausgeloggt werden. Beim Ausloggen (Abmelden), wird der Benutzer auf eine Seite mit Links geleitet. Es ist auch die zukünftige Option einer Weiterleitung auf eine bestimmte, existierende HTML-Seite denkbar. Dies könnte eventuell vom Referrer abhängig gemacht werden, unter welchem der Kunde den Scanner ursprünglich aufgerufen hat. Vertraulich Seite 20 13.05.2013 Abschliessende Bemerkungen Die Entwicklung von SecCheck verlief einigermaßen unproblematisch, was wohl auch auf die Qualität der verwendeten Tools und Komponenten schließen läst. Einige Probleme und Besonderheiten, die erwähnenswert sind: - ApacheMonitor läuft auf der Scanner-Maschine nicht als Service, der Grund ist unklar. Da dies aber ohnehin nicht zwingend notwendig ist, wurde das Programm in das AutostartVerzeichnis des Administrators kopiert. - Bmail.exe hat Probleme mit der Reihenfolge der Kommandozeilenargumente; Eine akzeptable Reihenfolge mußte durch Trial-and-Error gefunden werden. - Eigentlich kein Problem, sondern ein Segen: Die offizielle Windows-Version von nmap ist während der Entwicklung erschienen. Somit konnte auf die (sehr instabile) nmapNTVersion von eeye.com verzichtet werden. Als Folge daraus werden Scans sofort nach Eingang des Auftrages ausgeführt. Der Bericht muß nicht mehr per Email zugestellt werden, sondern kann sofort als HTML am Browser des Anwenders angezeigt werden. - NBTEnum.exe hat keinen Zugriff auf Remote-Shares im SYSTEM-Userkontext: Dies ist ein Sicherheits-Feature von Windows NT. Dem Apache-Service (unter dessen Kontext auch gestartete CGI-Programme ausführen) mußte deshalb ein neuer Benutzer zugeordnet werden, was aber ein neues Problem (siehe Unten) verursachte. - Da nur dem SYSTEM-User das Recht, mit dem Desktop zu interagieren zugeteilt werden kann, der SYSTEM-User aber aufgrund des oben beschrieben Share-Problems nicht verwendet werden darf, mußte der eingesetzte PRNG [6] modifiziert werden. Diese Modifikation betrifft alle Teile, die mit dem Desktop interagieren. Diese wurden aus Zeitgründen einfach auskommentiert, was die Sicherheit des PRNG etwas reduziert. In einem späteren Schritt sollten neue Entrophiequellen hinzugefügt werden; beispielsweise könnten Error-Counters der Netzwerkkarte verwendet werden. - Zeitproblem – Aufgrund des sehr engen Zeitrahmens der IPA und der relativ hohen Komplexität des Produktes mußten das ursprünglich vorgesehene Administrations-CGIProgramm, sowie der Maintenance Daemon als Bestandteile der IPA gestrichen werden. Aus dem gleichen Grund gestaltet sich der Umfang der verwendeten Port-DB relativ bescheiden. An allen drei Punkten soll in Zukunft aber noch weitergearbeitet werden. Von diesen kleineren Problemen einmal abgesehen, ist im Zuge dieser IPA dennoch ein beachtliches Werk entstanden – ich war selber beeindruckt, als ich den ersten Report gesehen habe. Ich hoffe, dass der Synecta SecCheck vielen Internet-Usern dabei helfen wird, ihre Systeme besser abzusichern, und dass der kostenlose Security-Checker viele neue Besucher –und potentielle Kunden- auf die Synecta-Homepage bringen möge. In diesem Sinne, ANNUIT COEPTIS! Vertraulich Seite 21 13.05.2013 Referenzen [1] Apache Webserver http://www.apache.org [2] Common Gateway Interface http://hoohoo.ncsa.uiuc.edu/cgi/overview.html [3] Microsoft Data Access Objects (DAO 3.6) http://msdn.microsoft.com/library/default.asp?url=/library/enus/odeomg/html/deovrmicrosoftdataaccessobjectsdao36objectlibrary.asp [4] Hardening Windows 2000 TCP/IP Stack against Denial Of Service http://support.microsoft.com/?kbid=315669 [5] Restrictions of Local System User Account http://msdn.microsoft.com/library/default.asp?url=/library/enus/dllproc/base/localsystem_account.asp [6] Ethereal Chaos Generator (Cryptographically Strong PRNG) http://www.a1vbcode.com/app.asp?ID=1406 [7] Planet Source Code, Public Source Code Repository http://www.pscode.com [8] spacebitch.com softlabs http://softlabs.spacebitch.com/ Vertraulich Seite 22 13.05.2013