Am 11. November 2021 veröffentlichte Google TAG einen Blogpost über Watering-Hole-Angriffe, die über Exploits für den Safari-Webbrowser unter macOS laufen. In der Woche vor dieser Veröffentlichung hatten ESET-Forscher diese Kampagne untersucht und zusätzliche Details zu den Zielen sowie zur kompromittierenden Malware herausgefunden. In diesem Blogpost untersuchen wir den WebKit-Exploit, der zur Kompromittierung von Mac-Nutzern eingesetzt wird, und wir analysieren den ausgelieferten Schadcode, der zu einer neuen Malware-Familie für macOS gehört. Zuerst betrachten, wie die Opfer überhaupt mit dem Schadcode in Kontakt gekommen sind.

Ziele

Zuerst betrachten, wie die Opfer überhaupt mit dem Schadcode in Kontakt gekommen sind. Laut Felix Aimé von SEKOIA.IO war eine der Websites, die zur Verbreitung der Exploits verwendet wurden, eine gefälschte Website, die auf Aktivisten aus Hongkong abzielte. Auf der Homepage ist unter anderem zu lesen: „Liberate Hong Kong, the revolution of our times“. Das sehr aktuelle Registrierungsdatum der fightforhk[.]com-Domain, der 19. Oktober 2021, und die Tatsache, dass die Website nicht mehr zugänglich ist, unterstützt diese Idee. Wir konnten auch bestätigen, dass das Internet Archive am 13. November eine Kopie der Webseite zwischengespeichert hat. Diese Kopie enthält den bösartigen Iframe, wie in Abbildung 1 zu sehen.

Abbildung 1. Die Seite fightforhk[.]com, archiviert von der Wayback Machine am 13. November

 

ESET-Forscher fanden eine weitere Website, diesmal eine legitime, die aber ebenfalls kompromittiert war. Sie verbreitete denselben Exploit in den wenigen Monaten vor der Veröffentlichung von Google TAG. Es ist die Seite des demokratiefreundlichen Online-Radiosenders D100 aus Hongkong. Wie in Abbildung 2 zu sehen, wurde zwischen dem 30. September und dem 4. November 2021 ein iFrame in Seiten eingefügt, die in bc.d100[.]net – dem von Abonnenten genutzten Bereich der Website – bereitgestellt wurden.

Beide Verteilungsmethoden haben etwas gemeinsam: Sie ziehen Besucher aus Hongkong an, die sich für die Demokratiebewegung interessieren. Es scheint, dass sie das primäre Ziel dieser Bedrohung waren.

Abbildung 2. Auszug aus https://bc.d100[.]net/Product/Subscription vom 4. November 2021

Die Exploit-Kette

Wie in Abbildung 3 zu sehen, sucht die Seite, die auf der bösartigen Domain amnestyhk[.]org gehostet wird, nach der installierten macOS-Version und leitet zur nächsten Stufe weiter, wenn der Browser unter macOS 10.15.2 oder neuer läuft.

Abbildung 3. Inhalt der Seite defaultaa.html page auf amnestyhk[.]org

Die nächste Stufe namens 4ba29d5b72266b28.html (siehe Abbildung 4) lädt einfach das JavaScript mit dem Exploit-Code – mac.js.

Abbildung 4. Inhalt der Seite 4ba29d5b72266b28.html

Beachten Sie, dass das script-Tag zum Laden von caps.js auskommentiert wurde. Die vorherige Version des Exploits lud Capstone.js aus dieser Datei, während in der neuen Version Capstone.js dem Exploit-Code in mac.js vorangestellt wird.

Der WebKit-Exploit

Der verwendete Exploit zur Ausführung von Code im Browser ist ziemlich komplex und hatte, sobald er schön formatiert war, mehr als 1.000 Codezeilen. Es ist interessant, dass ein Teil des Codes auskommentiert wurde. Er deutet darauf hin, dass die Schwachstelle auch auf iOS und sogar auf PAC-fähigen (Pointer Authentication Code) Geräten wie dem iPhone XS und neueren Geräten ausgenutzt worden sein könnte (siehe Abbildung 5).

Abbildung 5. Auszug aus dem JavaScript-Exploit mit Kommentaren für Angriffe auf iOS- und PAC-fähige Geräte

Wir können bestätigen, dass der von Google TAG identifizierte Patch die Schwachstelle behebt. Es ist möglich, dass dieser Schwachstelle die CVE-2021-1789 zugewiesen wurde, aufgrund des Mangels an öffentlich verfügbaren technischen Details konnten wir dies jedoch nicht bestätigen. Im Folgenden skizzieren wir, wie sich die Schwachstelle nach unseren Erkenntnissen auf Safari-Versionen vor 14.1 auswirkt.

Der Exploit implementiert zwei Primitive, um Lese- und Schreibzugriff auf den Speicher zu erhalten: Das erste dient dazu die Adresse eines Objekts zu herauszufinden (addrof). Das zweite dient der Erstellung eines gefälschten JavaScript-Objekt aus einer bestimmten Speicheradresse (fakeobj). Mit diesen beiden Funktionen erstellt der Exploit zwei Arrays unterschiedlichen Typs, die sich im Speicher überlappen. Dadurch ist er in der Lage, in einem von ihnen einen Wert zu setzen, der als Zeiger behandelt wird, wenn mit dem anderen darauf zugegriffen wird. Die Technik wird von Samuel Groß in seinen zahlreichen Veröffentlichungen zu diesem Thema gut beschrieben. Im Folgenden erläutern wir die Schwachstelle, die das Durchsickern von Objektadressen möglich gemacht hat.

Der Exploit beruht auf einem Nebeneffekt, der durch die Änderung einer Objekteigenschaft verursacht wird, damit sie über eine „Getter“-Funktion zugänglich ist, während die Eigenschaften des Objekts in JIT-kompiliertem Code aufgelistet werden. Die JavaScript-Engine spekuliert fälschlicherweise, dass der Wert der Eigenschaft in einem Array zwischengespeichert wird und nicht das Ergebnis des Aufrufs der Getter-Funktion ist. Wir haben den relevanten Teil des Codes extrahiert, der das addrof-Primitive aktiviert, das Sie in Abbildung 6 sehen können. Kommentare, die mit (e)r beginnen, stammen von ESET Research.

Abbildung 6. Kommentierter Auszug des Exploits, der das Leaken von Objektadressen ermöglicht

Die erste Veränderung, die hier passiert, ist das Ergebnis von bar(vic). Die Funktion gibt einen Zeiger auf ein JSCell-Objekt (genauer gesagt ein GetterSetter) zurück, auf das niemals vom JavaScript-Code aus zugegriffen werden sollte. Hier ist das Ergebnis von describe(bar(vic)) in einer JavaScriptCore-Konsole:

Zelle: 0x7fffb34dc080 (0x7ffff38cc4c8:[0x3af5, GetterSetter, {}, NonArray, Leaf]), Struktur-ID: 15093

Diese JSCell wird dann durch Aufrufen der JavaScript-Object-Funktion in ein JSObject konvertiert. Intern führt dies zum Aufruf der toObject-Methode von JSCell. Es gibt keine Implementierung zum Konvertieren eines GetterSetter in ein JSObject, und der Code wird schließlich zurückfallen und davon ausgehen, dass sein Typ ein Symbol ist. Der GetterSetter wird fälschlicherweise in ein Symbol umgewandelt. Möglicherweise ist Ihnen die Behauptung aufgefallen, dass der Zelltyp ein Symbol ist, bevor Sie die Umwandlung im Code ausführen. Das ASSERT-Makro in WebKit wird jedoch aus Release-Builds kompiliert.

Im Speicher ist die Position von getter[0] dieselbe wie der Wert dieses beschädigten Symbols. Wenn Sie getter[0] also einen Wert neu zuweisen, ändert sich der Wert des Symbols. Sein Wert wird mithilfe seiner toString-Methode aus JavaScript abgerufen.

Der aktualisierte JavaScriptCore-Code prüft nun, ob das Objekt Eigenschaften mit GetterSetter - nach der Property-Enumeration - enthält. Danach wird erwogen, ob auf das Attribut des Objekts „schnell“ zugegriffen werden kann.

Die detaillierte Erstellung der gefälschten Objekte würde einen eigenen Artikel erfordern. Kurz gesagt, es missbraucht denselben Fehler, obwohl dieses Mal das Objekt so manipuliert wird, dass der JIT-kompilierte Code auf ein Element zugreift, das außerhalb der Grenzen liegt, und eine Adresse zurückgibt, die vor dem Abrufen sorgfältig auf den Heap gesprayt wurde.

Der Rest des Codes ermöglicht das Umgehen von Eindämmungsmaßnahmen wie Gigacage und lädt die nächste Stufe.

Wie von Google TAG erklärt, lädt das JavaScript eine ausführbare Mach-O-Datei in den Speicher. Der rudimentäre Loader implementiert keine Importsymbole aus externen Bibliotheken; stattdessen werden die Adressen von dlopen und dlsym in das geladene Mach-O gepatcht. Diese können dann aus der ausführbaren Datei verwendet werden, um die Adressen von Funktionen aus externen Bibliotheken dynamisch zu laden und abzurufen.

Rechteausweitung auf root

Nachdem die Codeausführung erreicht wurde, ist die nächste Stufe ein Mach-O, das in den Speicher geladen und ausgeführt wird. Dieser Mach-O nutzt eine lokale Schwachstelle bei der Rechteausweitung aus, um die nächste Stufe als Root auszuführen. Unsere Untersuchung bestätigt die Analyse von Google, dass die ausgenutzte Schwachstelle von Xinru Chi und Tielei Wang in einer Präsentation auf der zer0con 2021 beschrieben, aber auch auf der MOSEC 2021 von Tielei Wang ausführlicher vorgestellt wurde. Der Schwachstelle wurde CVE-2021-30869 zugewiesen. Abbildung 7 zeigt einen Aufruf einer Funktion, die Tielei Wang in seiner letzten Präsentation adjust_port_type genannt hat. Diese Funktion, die für die Änderung des internen Typs eines Mach-Ports verantwortlich ist, ist im Mach-O genauso implementiert, wie es auf der MOSEC vorgestellt wurde. Das Ändern des Typs eines Mach-Ports sollte nicht möglich sein, es sei denn, es besteht eine Schwachstelle.

Abbildung 7. Ändern des Porttyps von IKOT_NAMED_ENTRY in IKOT_HOST_PRIV, um Zugriff auf spezielle (privilegierte) Mach-Ports zu erhalten

Zusammenfassend macht der Mach-O Folgendes:

  1. Lädt eine Datei von der als Argument angegebenen URL herunter
  2. Entschlüsselt diese Datei mit AES-128-EBC und TEA mit einem benutzerdefinierten Delta
  3. Schreibt die resultierende Datei nach $TMPDIR/airportpaird und macht sie ausführbar
  4. Verwendet den Privilege Escalation Exploit, um das Attribut com.apple.quarantine aus der Datei zu entfernen, um zu vermeiden, dass der Benutzer aufgefordert wird, den Start der unsignierten ausführbaren Datei zu bestätigen
  5. Verwendet die gleiche Rechteausweitung, um die nächste Stufe mit Root-Rechten zu starten

Bei der entschlüsselten Nutzlast unterscheidet sich unsere Analyse am meisten von der Beschreibung von Google TAG: Die Nutzlast, die an gefährdete Besucher der D100-Site geliefert wurde, war eine neue macOS-Malware, die wir DazzleSpy genannt haben.

DazzleSpy

DazzleSpy ist eine voll funktionsfähige Backdoor, die Angreifern eine Vielzahl von Funktionen bietet, um einen kompromittierten Computer zu kontrollieren und Dateien von diesem zu exfiltrieren. Unser Beispiel ist eine Mach-O-Binärdatei, die für die x86_64-CPU-Architektur kompiliert wurde.

Persistenz

Um auf dem kompromittierten Gerät persistent zu werden, fügt die Malware dem LaunchAgents-Ordner eine Eigenschaftslistendatei (plist; siehe Abbildung 8) namens com.apple.softwareupdate.plist hinzu. Die ausführbare Malware-Datei heißt softwareupdate und wird im Ordner $HOME/.local/ gespeichert.

Abbildung 8. Property List-Datei im LaunchAgents-Ordner

C&C-Kommunikation

DazzleSpy stellt eine Verbindung zu einem fest codierten Command&Control-Server (C&C) her. Die IP-Adresse und der Port, die in dem von uns entschlüsselten Schadcode gefunden wurden, waren 88.218.192[.]128:5633. Zuerst führt die Malware einen TLS-Handshake durch und verwendet dann ein benutzerdefiniertes Protokoll, um per JSON-Objekten Befehle vom C&C-Server an kompromittierte Macs weiterzugeben. Die Binärdatei von DazzleSpy enthält ein X.509-Zertifikat, das als Zertifizierungsstelle (CA) verwendet wird. Es überprüft, ob das Zertifikat des Servers von dieser Zertifizierungsstelle ausgestellt wurde. In der Praxis wird dasselbe selbstsignierte Zertifikat sowohl für die CA als auch für den C&C-Server verwendet. Die Technik schützt die Kommunikation der Malware vor potenziellem Abhören, indem sie das Senden von Daten verweigert, wenn keine Ende-zu-Ende-Verschlüsselung möglich ist.

Tabelle 1 enthält die Liste der von DazzleSpy unterstützten Befehle. Die erste Spalte ist der Name des Befehls, der im vom C&C-Server empfangenen JSON-Objekt vorhanden sein muss. Viele Befehle unterstützen optionale oder obligatorische Parameter.

Tabelle 1. DazzleSpy C&C-Befehle

Command name Purpose
heartbeat Sends heartbeat response.
info Collects information about compromised computer, including:
 • Hardware UUID and Mac serial number
 • Username
 • Information about disks and their sizes
 • macOS version
 • Current date and time
 • Wi-Fi SSID
 • IP addresses
 • Malware binary path and MD5 hash of the main executable
 • Malware version
 • System Integrity Protection status
 • Current privileges
 • Whether it’s possible to use CVE-2019-8526 to dump the keychain
searchFile Searches for the specified file on the compromised computer.
scanFiles Enumerates files in Desktop, Downloads, and Documents folders.
cmd Executes the supplied shell command.
restartCMD Restarts shell session.
restart Depending on the supplied parameter: restarts C&C command session, shell session or RDP session, or cleans possible malware traces (fsck_hfs.log file and application logs).
processInfo Enumerates running processes.
keychain Dumps the keychain using a CVE-2019-8526 exploit if the macOS version is lower than 10.14.4. The public KeySteal implementation is used.
downloadFileInfo Enumerates the supplied folder, or provides creation and modification timestamps and SHA-1 hash for a supplied filename.
downloadFile Exfiltrates a file from the supplied path.
file File operations: provides information, renames, removes, moves, or runs a file at the supplied path.
uninstall Deletes itself from the compromised computer.
RDPInfo Provides information about a remote screen session.
RDP Starts or ends a remote screen session.
mouseEvent Provides mouse events for a remote screen session.
acceptFileInfo Prepares for file transfer (creates the folder at the supplied path, changes file attributes if it exists).
acceptFile Writes the supplied file to disk. With additional parameters, updates itself or writes files required for exploiting the CVE-2019-8526 vulnerability.
socks5 Starts or ends SOCKS5 session (not implemented).
recoveryInfo These seem like file recovery functions that involve scanning a partition. These functions do not seem to work and are probably still in development; they contain lots of hardcoded values.
recovery #rowspan#

Artefakte

Bei der Analyse der DazzleSpy-Binärdatei haben wir eine Reihe interessanter Artefakte gefunden, die auf einen internen Namen für die Malware und die Herkunft der Autoren hindeuten könnten.

An mehreren Stellen (siehe z. B. Abbildung 9) verweist die Malware auf osxrk, und die Zeichenfolge 1.1.0 scheint wahrscheinlich eine interne Versionsnummer zu sein.

Abbildung 9. Möglicher interner Name und Versionsnummer der DazzleSpy-Malware

Darüber hinaus scheinen die Autoren von DazzleSpy nicht so besorgt über die Betriebssicherheit gewesen zu sein, da sie den Benutzernamen in Pfaden hinterlassen haben, die in die Binärdatei eingebettet sind. Abbildung 10 enthält Pfade, die diesen Benutzernamen und interne Modulnamen offenbaren.

Abbildung 10. In die DazzleSpy-Binärdatei eingebettete Pfade

Sobald die Malware das aktuelle Datum und die aktuelle Uhrzeit auf einem kompromittierten Computer erhält, wie Sie in Abbildung 11 sehen, konvertiert sie das erhaltene Datum in die Zeitzone Asien/Shanghai (auch bekannt als China Standard Time), bevor sie es an den C&C-Server sendet.

Abbildung 11. Dekompilierter Code der getSystemDate-Funktion

Darüber hinaus ist zu beachten, dass die DazzleSpy-Malware eine Reihe interner Nachrichten in chinesischer Sprache enthält, wie beispielsweise in Abbildung 12 zu sehen ist.

Abbildung 12. Interne Fehlermeldung auf Chinesisch

Fazit

Angesichts der Komplexität der in dieser Kampagne verwendeten Exploits, gehen wir davon aus, dass die Gruppe hinter dieser Operation über starke technische Fähigkeiten verfügt. Während online Informationen über die hier verwendete Schwachstelle Local Privilege Escalation (LPE) veröffentlicht wurden, konnten wir nichts über die spezifische WebKit-Schwachstelle finden, die verwendet wird, um die Codeausführung in Safari zu erreichen. Es ist auch interessant, dass DazzleSpy eine Ende-zu-Ende-Verschlüsselung erzwingt und nicht mit seinem C&C-Server kommuniziert, wenn jemand versucht, die unverschlüsselte Übertragung zu belauschen, indem er einen TLS-Inspektions-Proxy zwischen das kompromittierte System und den C&C-Server einfügt.

Die Watering-Hole-Operationen, die diese Gruppe durchführt, zeigen, dass ihre Ziele wahrscheinlich politisch aktive, demokratiefreundliche Personen in Hongkong sind. Diese Kampagne hat Ähnlichkeiten mit einem Angriff aus dem Jahr 2020, bei der LightSpy iOS-Malware (beschrieben von TrendMicro und Kaspersky) auf die gleiche Weise verbreitet wurde, indem sie iFrame-Injektion auf Websites für Bürger Hongkongs einsetzte, was zu einem WebKit-Exploit führte. Wir können an dieser Stelle nicht bestätigen, ob beide Kampagnen von derselben Gruppe stammen, aber ESET Research wird weiterhin solche bösartigen Aktivitäten verfolgen und darüber berichten.

Indicators of Compromise (IoCs)

Samples

SHA-1 Filename ESET detection name Description
F3772A23595C0B51AE32D8E7D601ACBE530C7E97 mac.js JS/Exploit.Agent.NQK JavaScript code with WebKit exploit launching an LPE.
95889E0EF3D31367583DD31FB5F25743FE92D81D N/A OSX/Exploit.Agent.C Mach-O file with LPE launching next stage.
EE0678E58868EBD6603CC2E06A134680D2012C1B server.enc OSX/DazzleSpy DazzleSpy Mach-O after decryption of server.enc.

Filenames

  • $HOME/Library/LaunchAgents/com.apple.softwareupdate.plist
  • $HOME/.local/softwareupdate
  • $HOME/.local/security.zip
  • $HOME/.local/security/keystealDaemon
  • $HOME/.local/security/libkeystealClient.dylib

Network

URLs of Safari exploit

  • https://amnestyhk[.]org/ss/defaultaa.html
  • https://amnestyhk[.]org/ss/4ba29d5b72266b28.html
  • https://amnestyhk[.]org/ss/mac.js
  • https://amnestyhk[.]org/ss/server.enc

DazzleSpy C&C server

  • 88.218.192[.]128:5633

DazzleSpy CA certificate

SHA-256: 1F862B89CC5557F8309A6739DF30DC4AB0865668193FDFF70BA93F05D4F8C8B8

Certificate:
	Data:
		Version: 1 (0x0)
		Serial Number: 10557282746731470350 (0x928300b9284a1e0e)
	Signature Algorithm: sha256WithRSAEncryption
		Issuer: C=11, ST=11, L=11, O=11, OU=11, CN=11/emailAddress=11@qq.com
		Validity
			Not Before: May 18 07:26:17 2021 GMT
			Not After : May 16 07:26:17 2031 GMT
		Subject: C=11, ST=11, L=11, O=11, OU=11, CN=11/emailAddress=11@qq.com
        Subject Public Key Info:
			Public Key Algorithm: rsaEncryption
				Public-Key: (2048 bit)
				Modulus: …
				Exponent: 65537 (0x10001)
	Signature Algorithm: sha256WithRSAEncryption
-----BEGIN CERTIFICATE-----
MIIDTDCCAjQCCQCSgwC5KEoeDjANBgkqhkiG9w0BAQsFADBoMQswCQYDVQQGEwIx
MTELMAkGA1UECAwCMTExCzAJBgNVBAcMAjExMQswCQYDVQQKDAIxMTELMAkGA1UE
CwwCMTExCzAJBgNVBAMMAjExMRgwFgYJKoZIhvcNAQkBFgkxMUBxcS5jb20wHhcN
MjEwNTE4MDcyNjE3WhcNMzEwNTE2MDcyNjE3WjBoMQswCQYDVQQGEwIxMTELMAkG
A1UECAwCMTExCzAJBgNVBAcMAjExMQswCQYDVQQKDAIxMTELMAkGA1UECwwCMTEx
CzAJBgNVBAMMAjExMRgwFgYJKoZIhvcNAQkBFgkxMUBxcS5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFfrP+LbCk9KhPH2gQ3V5lBWCpuM+yzBzn
ofL2RJiTMedP467Js4wzrP+qCkXs9STaOZCvYRFaCmfY9bG7PsrgqG90OHfVkttG
5xIdEpd5XPl+GYl/48ridpE7mgw+KO0oRxoyUO1if9nRXvHNGmx0C3i9Rb6ahynv
dEBAZVxeX20fDHMr0dvVe4TKst9g5W02o31zU54mx2f7m2Kgit+n+UsDA/uBRF/c
GcWsvQFVlcguFmBDt58t98BO5nEmI3iDEfUi8FTf2HVSS0LAYC83IkwZyWpML9Jn
uVg67KFKprNMmzBxDK0eDa9ZHObohj3iscM3IYXlCnicbOLYTCvRAgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBAAvkJC5Fi8+Kz8roBhzCY3ayPLMMMj49aHGU/JDLZwsh
WSng5/eY7LrGkTqP0tKay/rrxQvyMeZftvB0DMCbxu0vndK/jTqruxS+ZXDkqyOb
ykU0Z6TqRZ/ltgcK9ii4R6PgUEynrJVZHtUHDtemulpHgPRjkFDA4emOui1kFdNT
gnUr0vgh12KlVNAm64UVh9kkneCTFZtYeCAGNw5kFknv5OgsjcaueqCsm3a3dxFq
7JqReIV1WDx+QEBXgM4itvQRY+d5pv5eOlz8sBzxFR7+Gh/Q9aJoPL+ZX7kouMEU
bKwsEwNCrWZWQu41ghFi/8MdqBxb2Nb9H4gCupqKdiI=
-----END CERTIFICATE-----

MITRE ATT&CK techniques

This table was built using version 10 of the MITRE ATT&CK framework.

Tactic ID Name Description
Resource Development T1583.001 Acquire Infrastructure: Domains Domain names such as amnestyhq[.]org were acquired to use on compromised web servers.
T1583.004 Acquire Infrastructure: Server Servers (or virtual servers) were rented to serve WebKit exploits and used as C&C servers for DazzleSpy.
T1584.004 Compromise Infrastructure: Server A legitimate website was compromised to add an iframe loading malicious JavaScript code.
T1587.001 Develop Capabilities: Malware DazzleSpy is macOS malware developed to steal information from its victims.
T1587.003 Develop Capabilities: Digital Certificates DazzleSpy verifies the authenticity of its C&C server using an X.509 certificate.
T1587.004 Develop Capabilities: Exploits An undocumented Safari exploit was used to compromise the targets.
T1608.004 Stage Capabilities: Drive-by Target This operation compromised a website that is likely to be visited by its targets, to distribute malware.
Initial Access T1189 Drive-by Compromise The compromised website served the exploit to visitors using Safari on a Mac.
Execution T1569 System Services The exploit sends Mach messages to launchd to remove the quarantine flag and to kuncd to launch the malware.
Persistence T1543.001 Create or Modify System Process: Launch Agent DazzleSpy persists by installing a Launch Agent.
Privilege Escalation T1068 Exploitation for Privilege Escalation An LPE exploit for macOS is used to elevate privileges to root.
Defense Evasion T1620 Reflective Code Loading The LPE exploit downloading the next stage is loaded and executed in memory only.
Credential Access T1555.001 Credentials from Password Stores: Keychain DazzleSpy can steal credentials from the macOS keychain.
Discovery T1083 File and Directory Discovery DazzleSpy can be used to enumerate files in specific folders.
T1057 Process Discovery DazzleSpy can obtain the list of running processes.
T1082 System Information Discovery DazzleSpy can obtain the macOS version.
T1016 System Network Configuration Discovery DazzleSpy can obtain the IP address and Wi-Fi SSID.
T1033 System Owner/User Discovery DazzleSpy can obtain the current username from a compromised Mac.
T1124 System Time Discovery DazzleSpy can obtain the system time on a compromised Mac.
Collection T1005 Data from Local System DazzleSpy can search for documents on the compromised system.
T1113 Screen Capture DazzleSpy has the ability to record screen activity.
Command and Control T1071 Application Layer Protocol DazzleSpy uses a custom JSON-based protocol for its C&C communications.
T1132.001 Data Encoding: Standard Encoding DazzleSpy uses base64 to encode parts of its C&C communications.
T1573 Encrypted Channel DazzleSpy uses TLS encryption.
T1571 Non-Standard Port DazzleSpy uses TCP port 5633.
Exfiltration T1041 Exfiltration Over C2 Channel DazzleSpy exfiltrates data over its C&C communications channel.