diff --git a/writeup.aux b/writeup.aux index 9d3edb1..0e5362d 100644 --- a/writeup.aux +++ b/writeup.aux @@ -3,3 +3,12 @@ \catcode `"\active \babel@aux{naustrian}{} \@writefile{toc}{\contentsline {section}{\numberline {1}Zusammenfassung}{1}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {2}Methodik}{2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Informationsgewinnung}{2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Verwendete Programme}{2}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{\numberline {3}Erkenntnisse}{2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Webserver}{3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}Kein TLS}{3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2}Beliebige Frames per URL laden}{3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3}Öffentlich zugängliche Dateien mit Metainformationen}{3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.4}Sehr alte Version des Servers}{5}\protected@file@percent } diff --git a/writeup.log b/writeup.log index 736f6fc..5d31eec 100644 --- a/writeup.log +++ b/writeup.log @@ -1,4 +1,4 @@ -This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Arch Linux) (preloaded format=pdflatex 2020.1.12) 2 FEB 2020 23:28 +This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Arch Linux) (preloaded format=pdflatex 2020.1.12) 10 FEB 2020 00:18 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -141,8 +141,7 @@ Package: multirow 2019/05/31 v2.5 Span multiple rows of a table (/usr/share/texmf-dist/tex/latex/url/url.sty \Urlmuskip=\muskip10 Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. -) -No file writeup.aux. +) (./writeup.aux) \openout1 = `writeup.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 47. @@ -157,6 +156,7 @@ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 47. LaTeX Font Info: ... okay on input line 47. + *geometry* driver: auto-detecting *geometry* detected driver: pdftex *geometry* verbose mode - [ preamble ] result: @@ -208,37 +208,45 @@ LaTeX Font Info: External font `cmex10' loaded for size LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 55. LaTeX Font Info: Trying to load font information for OMS+cmr on input line 6 -6. +7. (/usr/share/texmf-dist/tex/latex/base/omscmr.fd File: omscmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions ) LaTeX Font Info: Font shape `OMS/cmr/m/n' in size <12> not available -(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 66. +(Font) Font shape `OMS/cmsy/m/n' tried instead on input line 67. [1 -{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] (./writeup.aux) ) +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2] [3] +Overfull \hbox (13.94131pt too wide) in paragraph at lines 183--183 +[]\T1/cmtt/m/n/12 Extensions: php, asp, aspx, jsp, js, html, do, action | HTTP +method: get | \[] + [] + +[4] [5] (./writeup.aux) ) Here is how much of TeX's memory you used: - 3363 strings out of 492167 - 45030 string characters out of 6131558 - 126616 words of memory out of 5000000 - 7714 multiletter control sequences out of 15000+600000 - 14470 words of font info for 36 fonts, out of 8000000 for 9000 + 3369 strings out of 492167 + 45098 string characters out of 6131558 + 127616 words of memory out of 5000000 + 7716 multiletter control sequences out of 15000+600000 + 15930 words of font info for 38 fonts, out of 8000000 for 9000 1141 hyphenation exceptions out of 8191 - 28i,10n,45p,360b,388s stack positions out of 5000i,500n,10000p,200000b,80000s -{/usr -/share/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc} -Output written on writeup.pdf (2 pages, 135374 bytes). +super/sfti1200.pfb> +Output written on writeup.pdf (5 pages, 206452 bytes). PDF statistics: - 44 PDF objects out of 1000 (max. 8388607) - 31 compressed objects within 1 object stream + 65 PDF objects out of 1000 (max. 8388607) + 46 compressed objects within 1 object stream 0 named destinations out of 1000 (max. 500000) 1 words of extra memory for PDF output out of 10000 (max. 10000000) diff --git a/writeup.pdf b/writeup.pdf index f7c6c82..95b87c9 100644 Binary files a/writeup.pdf and b/writeup.pdf differ diff --git a/writeup.synctex.gz b/writeup.synctex.gz new file mode 100644 index 0000000..2750e25 Binary files /dev/null and b/writeup.synctex.gz differ diff --git a/writeup.tex b/writeup.tex index 83ff015..4324b7c 100644 --- a/writeup.tex +++ b/writeup.tex @@ -74,23 +74,169 @@ Im Folgenden werden die wichtigsten Erkenntnisse kurz dargestellt Auch hier sollten Maßnahmen getroffen werden, die den Zugriff nur über ausgefüllte Formulare zulassen. \item Der FTP-Server ist auf dem Standardport verfügbar und es ist mutmaßlich verwundbar auf Bruteforce-Attacken. Einerseits sollte auch hier der Zugang verschlüsselt werden, etwa mit FTP over SSH\@. - Gegen Bruteforce-Attacken helfen zusätzlich Fail2ban und Public Keys statt Passwörtrn. + Gegen Bruteforce-Attacken helfen zusätzlich Fail2ban und Public Keys statt Passwörtern. Dies müssen die verwendeten Anwendungen aber unterstützen. \item Die Webseite kann durch modifizierte URLs in der Darstellung verändert werden. Die Daten auf dem Server müssen dafür nicht verändert werden. Dazu muss die Webseite selbst angepasst werden, um nicht versehentlich aus dem vorgesehenen Arbeitsverzeichnis rauszufallen bzw.\@ das Laden externer Frames zu verhindern. \item Die verwendete Software (4D Webstar 2004) ist mittlerweile über 15 Jahre alt. Es gibt zwar keine bekannten Bugs, jedoch sollte es nicht schwierig sein, mit heutigen Mitteln welche zu finden. - Deshalb wird dringend empfohlen, den werwendeten Software-Stack auf eine gut gewartete, aktuelle Basis zu stellen. + Deshalb wird dringend empfohlen, den verwendeten Software-Stack auf eine gut gewartete, aktuelle Basis zu stellen. Populäre Lösungen sind dafür ein aktuelles Linux mit Apache oder Nginx und den gewünschten Erweiterungen für Datenbanken und Skripting. \end{enumerate} \section{Methodik} +In die Untersuchungen waren folgende Personen involviert: +\begin{itemize} + \item Robert Führicht + \item Tobias Höller + \item Michael Preisach +\end{itemize} +Alle genannten sind bei SIGFLAG (\url{www.sigflag.at}) tätig. \subsection{Informationsgewinnung} +Ziel dieser Analyse ist Informationen über das System hinter \url{www.sternwarte.at} zu finden. +Für die gefundenen Services sollen möglichst alle frei zugänglichen Daten gefunden und ausgewertet werden. +Daraus ergeben sich dann Handlungsempfehlungen, die im Folgenden Teil des Berichts erläutert sind. \subsection{Verwendete Programme} +\begin{itemize} + \item Firefox 72 + \item Nmap 7.80 + \item Dirsearch 0.3.9 + \item TOR Web Browser (Firefox 68) +\end{itemize} \section{Erkenntnisse} +Die Analyse wird hier in die Services unterteilt, die auf dem Server zu finden sind. + +\subsection{Webserver} +Firefox kann in den Developer Tools die Metadaten des Response Headers analysieren. +Dort findet sich im Server-Tag die Information des Webservers: + +\begin{verbatim} + HTTP/1.1 200 OK + Server: 4D_WebStar_D/2004 + Date: Sun, 02 Feb 2020 21:08:44 GMT + Content-Length: 12281 + Last-Modified: Sun, 02 Feb 2020 21:08:44 GMT + Connection: Keep-Alive + Content-Type: text/html +\end{verbatim} +\begin{itemize} + \item Installierter Server: 4D WebStar\_D/2004, vermutlich installiert auf Mac OS X +\end{itemize} + +\subsubsection{Kein TLS} +Die Webseite bietet neben statischen Inhalten auch Anmeldeformulare für Events des Vereins an. +Im Sinne der §§24 ff DSGVO müssen geeignete technische Maßnahmen getroffen werden, damit persönliche Daten nicht an eine unbestimmte Zahl dritter Personen zugänglich gemacht werden kann. +Mit diesem Argument kommen wir zu der Einschätzung, dass dringend eine Verschlüsselung der Kommunikation eingeführt werden muss, um mit diesen Bestimmungen konform zu werden. +\\[2ex] +\textbf{Handlungsempfehlung:} Einführung von TLS1.2 oder höher für zumindest die Formularseiten, aber auch für das restliche Angebot des Vereins. Da dies aufgrund der veralteten Software nicht direkt unterstützt wird, muss entweder ein TLS-Proxy vorgeschalten werden oder die Website auf einen Server mit aktueller Software umgesiedelt werden. + +\subsubsection{Beliebige Frames per URL laden} +Die Darstellung der Webseite gliedert sich in 2 Frames, Verzeichnis und Inhaltsframe. \verb|start.html| stellt dabei den Inhalt dar und \verb|default.html| kümmert sich um das Verzeichnis. +Nun ist es aber möglich \url{www.sternwarte.at/default.html?} mit einer beliebigen URL aufzurufen. \url{http://www.sternwarte.at/default.html?https://jku.at} ruft dann die Startseite der JKU als Frame in der Vereinsseite auf. +Des Weiteren kann auch die eigene Seite geschachtelt aufgerufen werden: +\url{http://www.sternwarte.at/?/?/?/} - +Hier wird vier Mal \verb|default.html| aufgerufen und in den Inhaltsframe des vorherigen Aufrufes dargestellt. +\\[2ex] +\textbf{Handlungsempfehlung:} +\begin{itemize} + \item Variante 1: \verb|default.html| darf nur eine definierte Liste an Links entgegennehmen - die der vorhandenen Subseiten (Whitelisting). + \item Variante 2: Umbau von \verb|default.html| in eine Seite mit nur einem Frame und das Laden von weiteren Frames per URL ganz abschalten. +\end{itemize} + +\subsubsection{Öffentlich zugängliche Dateien mit Metainformationen} +Dirsearch traversiert die zugänglichen Seiten auf dem Server, indem es die URL errät. +Dazu hat Dirsearch eine Liste von Verzeichnissen aller gängiger Webserver. +Das Ergebnis dieser Suche: +\begin{verbatim} + dirsearch -u www.sternwarte.at -E + + |. _ _ _ _ _ _| v0.3.9 + (||| _) (/(|| (| ) + + Extensions: php, asp, aspx, jsp, js, html, do, action | HTTP method: get | \ + Threads: 10 | Wordlist size: 8673 + + Error Log: /home/fuero/.dirsearch/logs/errors-20-01-19_19-32-00.log + + Target: www.sternwarte.at + + [19:32:00] Starting: + [19:32:01] 200 - 2KB - /%3f/ + [19:32:03] 200 - 21KB - /.DS_Store + [19:32:13] 200 - 46KB - /log/error.log + [19:32:30] 500 - 294B - /ActiveDirectoryRemoteAdminScripts/ + [19:34:27] 200 - 64KB - /favicon.ico + [19:35:02] 200 - 408KB - /log/error.log + [19:35:35] 500 - 294B - /phpMyAdmin-2.11.5.1-all-languages/ + [19:35:35] 500 - 294B - /phpMyAdmin-2.11.7.1-all-languages-utf-8-only/ + [19:35:35] 500 - 294B - /phpMyAdmin-2.11.7.1-all-languages/ + [19:35:35] 500 - 294B - /phpMyAdmin-2.11.8.1-all-languages-utf-8-only/ + [19:35:35] 500 - 294B - /phpMyAdmin-2.11.8.1-all-languages/ + [19:35:53] 200 - 118B - /robots.txt + [19:36:14] 200 - 15KB - /start.html + [19:36:40] 500 - 294B - /WebSphereSamples.Configuration.config + + Task Completed +\end{verbatim} + +Die HTTP Statuscodes zeigen, dass einige URLs mit Code 500 antworten. +Bei Aufruf dieser Seiten ist zuverlässig und immer gleich. +Daher ist es sehr wahrscheinlich, dass der \emph{Internal Server Error} nur eine Verschleierungstaktik ist. + +Des Weiteren findet sich in Zeile 2 \verb|.DS_Store| welches auf dem MAC zum Speichern von Metadaten der in diesem Verzeichnis abgelegten Dateien genutzt wird. + +Viel Aussagekräftiger ist das \verb|error.log|, das mutmaßlich beim Blacklisting übersehen wurde. +Dieses Log wird wöchentlich in der Nacht von Samstag auf Sonntag gelöscht. +Im Anhang befindet sich eine Version von Anfang Februar. +Es werden alle Dateiaufrufe am Server geloggt, die einen Rückgabewert ungleich 0 haben. +Dieses Log bietet eine Vielzahl an Meta-Informationen, die ich hier nur beispielhaft aufzählen möchte: +\begin{itemize} + \item Wann sich der Administrator (vermutlich) eingeloggt oder ausgeloggt hat (Rückgabewert > 0) + \item Dazugehöriger Pfad zum Login des Backends (wieder unverschlüsselt!) + \item Welche Dateien geöffnet wurden (aber Rückgabewert = 15) + \item Fehler anderer Webauftritte auf diesem Server (\url{www.kalendermanufaktur.at}, \url{www.baer.co.at}) + \item Fehlerhaft eingegebene URLs auf diesem Server (alte Seiten auf dem Server oder Metainformationen zu den Besuchern) + \item Rückgabewerte der Datenbank und der hinterlegten Skripte - Damit kann der Ordner \verb|/4dcgi| durchsucht, bzw. dessen Inhalt aus dem Log ausgelesen werden. + \item Fehler des Mailservers geben Hinweis auf die Aufgaben des selben. Mehr dazu im Kapitel zu Mailserver +\end{itemize} + +Es wurden dank der Dokumentation für 4D WebStar, die noch immer online verfügbar ist (\url{http://www.island-data.com/downloads/books/4D_Web_Companion.pdf}), weitere gültige Pfade gefunden: +\begin{itemize} + \item \verb|/4dstats| - Abrufstatistiken + \item \verb|/4dhtmlstats| - Abrufstatistiken + \item \verb|/4dcacheclear| - Leeren des Caches + \item \verb|/4dwebtest| - Informationen über den verbundenen Client + \item \verb|/4dblank| - Leere Seite + \item \verb|/4dmethod| - Kann nicht aufgerufen werden, die URL wird aber erweitert auf beispielsweise \url{http://www.sternwarte.at/4dmethod//%23%231997692744.0} + \item \verb|/4dssi| - Verbotene Anfrage +\end{itemize} +Alle diese Seiten erzeugen keinen Log-Eintrag und sollten nicht direkt aufgerufen werden können. + +Zusätzlich lassen sich die Skripts im Ordner \verb|4dcgi|, die beispielsweise für das Erfassen der Formulardaten genutzt werden, direkt per URL ausführen, ganz ohne Parameter. Durch das Log können auch per Erraten der Namen weitere Skripte gefunden werden. + +\textbf{Handlungsempfehlung:} +\begin{itemize} + \item Im Arbeitsverzeichnis des Webservers sollten sich nur Dateien befinden, die mit der Auslieferung der Seite direkt zu tun haben. + Für Log-Dateien gibt es eigene Verzeichnisse. + \item Skripte dürfen nicht direkt per URL ohne Parameter aufgerufen werden können, es sie denn dieses Skript übernimmt auch die Darstellung des Formulars selbst. +\end{itemize} + + +\subsubsection{Sehr alte Version des Servers} +Laut unseren Recherchen ist der Webserver gepatcht, die letzten bekannten Bugs CVE 2004-0696 und CVE 2006-6131 scheinen hier gefixt zu sein. +Die Software wird aber vom Hersteller nicht mehr unterstützt. +Wenn also neue Bugs auftreten, werden diese nicht mehr repariert. +Daher sollte die Webseite auf einem Server betrieben werden, der von den Entwicklern noch mit Updates versorgt wird. +\\[2ex] +\textbf{Handlungsempfehlung:} +\begin{itemize} + \item Update der verwendeten Software auf aktuell gewartete Versionen. + \item Regelmäßige bzw. automatische Updates (zumindest bei reinen Sicherheitsupdates) +\end{itemize} + \end{document}