|
2 | 2 | creation_date = "2025/12/04" |
3 | 3 | integration = ["endpoint"] |
4 | 4 | maturity = "production" |
5 | | -updated_date = "2026/03/24" |
| 5 | +updated_date = "2026/04/21" |
6 | 6 |
|
7 | 7 | [rule] |
8 | 8 | author = ["Elastic"] |
9 | 9 | description = """ |
10 | 10 | Detects when GenAI tools access sensitive files such as cloud credentials, SSH keys, browser password databases, or |
11 | 11 | shell configurations. Attackers leverage GenAI agents to systematically locate and exfiltrate credentials, API keys, and |
12 | 12 | tokens. Access to credential stores (.aws/credentials, .ssh/id_*) suggests harvesting, while writes to shell configs |
13 | | -(.bashrc, .zshrc) indicate persistence attempts. Note: On linux only creation events are available. Access events are not yet implemented. |
| 13 | +(.bashrc, .zshrc) indicate persistence attempts. Note: On linux only creation events are available. Access events are |
| 14 | +not yet implemented. |
14 | 15 | """ |
15 | 16 | from = "now-9m" |
16 | 17 | index = ["logs-endpoint.events.file*"] |
@@ -80,26 +81,31 @@ file where event.action in ("open", "creation", "modification") and event.outcom |
80 | 81 |
|
81 | 82 | // GenAI process |
82 | 83 | ( |
83 | | - process.name in ( |
84 | | - "ollama.exe", "ollama", "Ollama", |
| 84 | + process.name in~ ( |
| 85 | + "ollama.exe", "ollama", |
85 | 86 | "textgen.exe", "textgen", "text-generation-webui.exe", "oobabooga.exe", |
86 | 87 | "lmstudio.exe", "lmstudio", "LM Studio", |
87 | | - "claude.exe", "claude", "Claude", |
88 | | - "cursor.exe", "cursor", "Cursor", |
89 | | - "copilot.exe", "copilot", "Copilot", |
| 88 | + "claude.exe", "claude", |
| 89 | + "cursor.exe", "cursor", |
| 90 | + "copilot.exe", "copilot", |
90 | 91 | "codex.exe", "codex", |
91 | | - "Jan", "jan.exe", "jan", |
92 | | - "gpt4all.exe", "gpt4all", "GPT4All", |
93 | | - "gemini-cli.exe", "gemini-cli", |
| 92 | + "jan.exe", "jan", |
| 93 | + "gpt4all.exe", "gpt4all", |
| 94 | + "gemini-cli.exe", "gemini-cli", "gemini.exe", |
94 | 95 | "genaiscript.exe", "genaiscript", |
95 | 96 | "grok.exe", "grok", |
96 | 97 | "qwen.exe", "qwen", |
97 | | - "koboldcpp.exe", "koboldcpp", "KoboldCpp", |
98 | | - "llama-server", "llama-cli" |
| 98 | + "koboldcpp.exe", "koboldcpp", |
| 99 | + "llama-server", "llama-cli", |
| 100 | + "windsurf.exe", "windsurf", |
| 101 | + "zed.exe", "zed", |
| 102 | + "opencode.exe", "opencode", |
| 103 | + "goose.exe", "goose" |
99 | 104 | ) or |
100 | | - // OpenClaw/Moltbot/Clawdbot via Node.js |
101 | | - (process.name in ("node", "node.exe") and |
102 | | - process.command_line like~ ("*openclaw*", "*moltbot*", "*clawdbot*")) |
| 105 | + // OpenClaw/Moltbot/Clawdbot family via Node.js |
| 106 | + (process.name in~ ("node", "node.exe") and |
| 107 | + process.command_line like~ ("*openclaw*", "*moltbot*", "*clawdbot*", |
| 108 | + "*nemoclaw*", "*nanoclaw*", "*picoclaw*")) |
103 | 109 | ) and |
104 | 110 |
|
105 | 111 | // Sensitive file paths |
@@ -139,54 +145,53 @@ file where event.action in ("open", "creation", "modification") and event.outcom |
139 | 145 |
|
140 | 146 | [[rule.threat]] |
141 | 147 | framework = "MITRE ATT&CK" |
142 | | - |
143 | 148 | [[rule.threat.technique]] |
144 | 149 | id = "T1552" |
145 | 150 | name = "Unsecured Credentials" |
146 | 151 | reference = "https://attack.mitre.org/techniques/T1552/" |
147 | | - |
148 | 152 | [[rule.threat.technique.subtechnique]] |
149 | 153 | id = "T1552.001" |
150 | 154 | name = "Credentials In Files" |
151 | 155 | reference = "https://attack.mitre.org/techniques/T1552/001/" |
152 | 156 |
|
| 157 | + |
153 | 158 | [[rule.threat.technique]] |
154 | 159 | id = "T1555" |
155 | 160 | name = "Credentials from Password Stores" |
156 | 161 | reference = "https://attack.mitre.org/techniques/T1555/" |
157 | 162 |
|
| 163 | + |
158 | 164 | [rule.threat.tactic] |
159 | 165 | id = "TA0006" |
160 | 166 | name = "Credential Access" |
161 | 167 | reference = "https://attack.mitre.org/tactics/TA0006/" |
162 | | - |
163 | 168 | [[rule.threat]] |
164 | 169 | framework = "MITRE ATT&CK" |
165 | | - |
166 | 170 | [[rule.threat.technique]] |
167 | 171 | id = "T1005" |
168 | 172 | name = "Data from Local System" |
169 | 173 | reference = "https://attack.mitre.org/techniques/T1005/" |
170 | 174 |
|
| 175 | + |
171 | 176 | [rule.threat.tactic] |
172 | 177 | id = "TA0009" |
173 | 178 | name = "Collection" |
174 | 179 | reference = "https://attack.mitre.org/tactics/TA0009/" |
175 | | - |
176 | 180 | [[rule.threat]] |
177 | 181 | framework = "MITRE ATT&CK" |
178 | | - |
179 | 182 | [[rule.threat.technique]] |
180 | 183 | id = "T1037" |
181 | 184 | name = "Boot or Logon Initialization Scripts" |
182 | 185 | reference = "https://attack.mitre.org/techniques/T1037/" |
183 | | - |
184 | 186 | [[rule.threat.technique.subtechnique]] |
185 | 187 | id = "T1037.004" |
186 | 188 | name = "RC Scripts" |
187 | 189 | reference = "https://attack.mitre.org/techniques/T1037/004/" |
188 | 190 |
|
| 191 | + |
| 192 | + |
189 | 193 | [rule.threat.tactic] |
190 | 194 | id = "TA0003" |
191 | 195 | name = "Persistence" |
192 | 196 | reference = "https://attack.mitre.org/tactics/TA0003/" |
| 197 | + |
0 commit comments