| ID | Name |
|---|---|
| T1417.001 | Keylogging |
| T1417.002 | GUI Input Capture |
Adversaries may log user keystrokes to intercept credentials or other information from the user as the user types them.
Some methods of keylogging include:
AccessibilityService class, overriding the onAccessibilityEvent method, and listening for the AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED event type. The event object passed into the function will contain the data that the user typed. | ID | Name | Description |
|---|---|---|
| S0422 | Anubis |
Anubis has a keylogger that works in every application installed on the device.[2] |
| S1079 | BOULDSPY | |
| S1094 | BRATA | |
| S0655 | BusyGasper |
BusyGasper can collect every user screen tap and compare the input to a hardcoded list of coordinates to translate the input to a character.[7] |
| S0480 | Cerberus | |
| S1083 | Chameleon |
Chameleon has logged keystrokes of an infected device.[9] Additionally, Chameleon has stolen PINs, passwords and graphical keys through keylogging functionalities.[10] |
| S9004 | Crocodilus |
Crocodilus has the ability to enable or disable keylogging.[11] |
| S9005 | DocSwap |
When an accessibility event occurs, DocSwap has used a keylogger to record the target application’s icon, package name, event text, and timestamp.[12][13] |
| S1054 | Drinik |
Drinik can use keylogging to steal user banking credentials.[14] |
| S1092 | Escobar | |
| S0478 | EventBot |
EventBot can abuse Android’s accessibility service to record the screen PIN.[16] |
| S0522 | Exobot |
Exobot has used web injects to capture users’ credentials.[17] |
| S0408 | FlexiSpy |
FlexiSpy can record keystrokes and analyze them for keywords.[18] |
| S1231 | GodFather |
GodFather has intercepted and recorded sensitive information from the application to include user credentials. GodFather has also leveraged a deceptive overlay that tricks users into submitting their device lock credentials which are captured.[19] |
| S0406 | Gustuff |
Gustuff abuses accessibility features to intercept all interactions between a user and the device.[20] |
| S0407 | Monokle | |
| S1062 | S.O.V.A. | |
| S1055 | SharkBot |
SharkBot can use accessibility event logging to steal data in text fields.[23] |
| S9006 | VajraSpy | |
| G0112 | Windshift |
Windshift has included keylogging capabilities as part of Operation ROCK.[25] |
| ID | Mitigation | Description |
|---|---|---|
| M1012 | Enterprise Policy |
When using Samsung Knox, third-party keyboards must be explicitly added to an allow list in order to be available to the end-user.[26] |
| M1011 | User Guidance |
Users should be wary of granting applications dangerous or privacy-intrusive permissions, such as keyboard registration or accessibility service access. |
| ID | Name | Analytic ID | Analytic Description |
|---|---|---|---|
| DET0661 | Detection of Keylogging | AN1751 |
For Android, detect Keylogging by correlating analyst-visible device/network evidence and management state; use streaming or batched telemetry only where the documented collector is deployed. Correlate API Calls via Application Vetting / Instrumented Dynamic Analysis [Dynamic API/runtime trace: AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED received by listener NOT IN $AccessibilityAllowList$ at rate > $KeystrokeEventThreshold$ per minute with source_apps spanning > $AppMonitorCountThreshold$ distinct apps]; Network Traffic Content via Enterprise Secure Web Gateway / Proxy [DNS/HTTP(S) inspection or proxy transaction metadata where enterprise decryption/inspection is deployed]; Permissions Request via Android Enterprise DPC / Application Vetting [DevicePolicyManager.getPermissionGrantState(); PackageManager manifest/requested-permission review]. Alert on a sequence or state change inconsistent with the device/app baseline, approved management policy, or expected user workflow; do not infer unobserved API calls, file/process activity, or payload content from management state alone. |
| AN1752 |
For iOS, detect Keylogging by correlating analyst-visible device/network evidence and management state; use streaming or batched telemetry only where the documented collector is deployed. Correlate Application State via Apple MDM [InstalledApplicationList / ManagedApplicationList]; Network Traffic Flow via Apple Network Extension / Enterprise VPN [NEFilterFlow / per-app VPN / secure-web-gateway flow metadata]; Permissions Request via Application Vetting [Code-signing entitlements and Info.plist privacy usage-description keys]. Alert on a sequence or state change inconsistent with the device/app baseline, approved management policy, or expected user workflow; do not infer unobserved API calls, file/process activity, or payload content from management state alone. |