First observed in 2018, LightSpy is a modular malware family that initially targeted iOS devices in Southern Asia before expanding to Android and macOS platforms. It consists of a downloader, a main executable that manages network communications, and functionality-specific modules, typically implemented as.dylib files (iOS, macOS) or.apk files (Android). LightSpy can collect VoIP call recordings, SMS messages, and credential stores, which are then exfiltrated to a command and control (C2) server.[1]
| Domain | ID | Name | Use | |
|---|---|---|---|---|
| Enterprise | T1071 | .001 | Application Layer Protocol:Web Protocols | LightSpy's C2 communication is performed over WebSockets using the open source library SocketRocket with functionality such as, heartbeat, receiving commands, and updating command status.[2] |
| Enterprise | T1123 | Audio Capture | LightSpy uses Apple's built-in AVFoundation Framework library to capture and manage audio recordings then transform them to JSON blobs for exfiltration.[2] | |
| Enterprise | T1217 | Browser Information Discovery | To collect data on the host's Wi-Fi connection history,LightSpy reads the | |
| Enterprise | T1555 | .001 | Credentials from Password Stores:Keychain | LightSpy performs an in-memory keychain query via |
| Enterprise | T1480 | Execution Guardrails | On macOS,LightSpy checks the existence of a process identification number (PID) file, | |
| Enterprise | T1041 | Exfiltration Over C2 Channel | To exfiltrate data,LightSpy configures each module to send an obfuscated JSON blob to hardcoded URL endpoints or paths aligned to the module name.[2] | |
| Enterprise | T1083 | File and Directory Discovery | LightSpy uses the | |
| Enterprise | T1105 | Ingress Tool Transfer | On macOS,LightSpy downloads a | |
| Enterprise | T1046 | Network Service Discovery | To collect data on the host's Wi-Fi connection history,LightSpy reads the | |
| Enterprise | T1027 | .001 | Obfuscated Files or Information:Binary Padding | LightSpy's configuration file is appended to the end of the binary. For example, the last |
| .013 | Obfuscated Files or Information:Encrypted/Encoded File | LightSpy encrypts the C2 configuration file using AES with a static key, while the module | ||
| Enterprise | T1057 | Process Discovery | If sent the command | |
| Enterprise | T1113 | Screen Capture | LightSpy uses Apple's built-in AVFoundation Framework library to access the user's camera and screen. It uses the | |
| Enterprise | T1129 | Shared Modules | LightSpy's main executable and module | |
| Enterprise | T1518 | Software Discovery | If sent the command | |
| Enterprise | T1082 | System Information Discovery | LightSpy's second stage implant uses the | |
| Mobile | T1437 | .001 | Application Layer Protocol:Web Protocols | LightSpy has used both HTTPS and Websockets to communicate with the C2.[3][4][5] |
| Mobile | T1532 | Archive Collected Data | LightSpy collects and compresses data to be exfiltrated using SSZipArchive.[5][4] | |
| Mobile | T1429 | Audio Capture | LightSpy has captured environment audio, phone calls and Voice over IP (VoIP) calls.[6][1][3][4][5] | |
| Mobile | T1398 | Boot or Logon Initialization Scripts | LightSpy has established auto-start execution during the system boot process.[4] | |
| Mobile | T1623 | Command and Scripting Interpreter | LightSpy has plugins for executing shell commands either from the C2 server or a library file called | |
| Mobile | T1634 | .001 | Credentials from Password Store:Keychain | LightSpy has accessed the device’s KeyChain data.[1][4][7][5] |
| Mobile | T1662 | Data Destruction | LightSpy has deleted media files and messenger-related files on the device.[4] Additionally,LightSpy has used the AppDelete plugin to remove multiple messaging applications, such as WeChat, QQ, Telegram, Line and Whatsapp.[5] | |
| Mobile | T1533 | Data from Local System | LightSpy has collected and exfiltrated files from messaging applications, such as Telegram, QQ, WeChat, and Whatsapp, and browser history from Chrome and Safari.[1][3][4][7][5] | |
| Mobile | T1456 | Drive-By Compromise | LightSpy gains initial execution when a victim visits a compromised or adversary-controlled website, including those mimicking legitimate sources such as a Hong Kong newspaper. Upon loading | |
| Mobile | T1642 | Endpoint Denial of Service | LightSpy has used the DeleteSpring plugin to render the device’s user interface inoperable by disabling SpringBoard, which is iOS's home screen manager.[5]LightSpy has used the BootDestroy plugin to prevent the victim device from booting by modifying the NVRAM parameter | |
| Mobile | T1646 | Exfiltration Over C2 Channel | ||
| Mobile | T1658 | Exploitation for Client Execution | LightSpy has compromised iPhones running iOS 12.1 and 12.2 without any user interaction.[7] | |
| Mobile | T1404 | Exploitation for Privilege Escalation | LightSpy uses the embedded | |
| Mobile | T1544 | Ingress Tool Transfer | LightSpy has retrieved files from the C2 server.[1][4] Examples of files from the C2 are | |
| Mobile | T1430 | Location Tracking | LightSpy has accessed the device’s GPS location.[1][3][7][5] | |
| Mobile | T1655 | Masquerading | LightSpy has masqueraded a Mach-O executable as a png file.[4][5] | |
| Mobile | T1575 | Native API | LightSpy's main executable and modules use native libraries to execute targeted functionality.[3][1][5][4] | |
| Mobile | T1423 | Network Service Scanning | LightSpy uses the | |
| Mobile | T1509 | Non-Standard Port | LightSpy has communicated with the C2 using ports 52202, 51200, 43201, 43202, 43203, and 21202.[3] | |
| Mobile | T1406 | Obfuscated Files or Information | Using an XOR-chain algorithm,LightSpy decrypts an embedded configuration blob containing URLs for jailbreak components and next-stage payloads. It also decrypts modules in memory and on disk using AES-ECB with the hardcoded key | |
| Mobile | T1660 | Phishing | LightSpy has delivered malicious links through Telegram channels and Instagram posts.[6][7] | |
| Mobile | T1424 | Process Discovery | ||
| Mobile | T1631 | Process Injection | LightSpy injects libcynject.dylib into the SpringBoard process to enable audio/video recording.[5] | |
| Mobile | T1636 | .002 | Protected User Data:Call Log | |
| .003 | Protected User Data:Contact List | LightSpy has accessed the device’s contact list.[1][3][4][7][5] | ||
| .004 | Protected User Data:SMS Messages | |||
| Mobile | T1513 | Screen Capture | ||
| Mobile | T1582 | SMS Control | ||
| Mobile | T1418 | Software Discovery | LightSpy has accessed a list of installed applications.[1][3][4][5] | |
| Mobile | T1409 | Stored Application Data | LightSpy has collected payment history from WeChat Pay.[1][3][5] | |
| Mobile | T1426 | System Information Discovery | LightSpy collects device information, including the phone number, IMEI, CPU details, screen specifications, and memory information.[5][4][3][1] | |
| Mobile | T1422 | System Network Configuration Discovery | LightSpy has collected device information such as IMEI, phone number, MAC address and IP address.[5] | |
| .002 | Wi-Fi Discovery | LightSpy uses the WifiList (or | ||
| Mobile | T1421 | System Network Connections Discovery | LightSpy has collected a list of cellular networks and connected Wi-Fi history using a LAN scanner based on MMLanScan.[6][1][3][4][7] | |
| Mobile | T1512 | Video Capture | LightSpy has the ability to take one picture, continuous pictures or event-related pictures using the device’s camera.[6][1][3][4][5] For iOS devices, the default file type for pictures is in High Efficiency Image Format (HEIC); for Android devices, the default file type for pictures is in JPEG format. | |