cisco-ai-skill-scanner 1.0.0__py3-none-any.whl → 1.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.2.dist-info}/METADATA +28 -13
- cisco_ai_skill_scanner-1.0.2.dist-info/RECORD +102 -0
- cisco_ai_skill_scanner-1.0.2.dist-info/entry_points.txt +4 -0
- {skillanalyzer → skill_scanner}/__init__.py +8 -4
- {skillanalyzer → skill_scanner}/_version.py +2 -2
- {skillanalyzer → skill_scanner}/api/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/api/api.py +4 -4
- {skillanalyzer → skill_scanner}/api/api_cli.py +8 -8
- {skillanalyzer → skill_scanner}/api/api_server.py +7 -7
- {skillanalyzer → skill_scanner}/api/router.py +3 -3
- {skillanalyzer → skill_scanner}/cli/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/cli/cli.py +71 -13
- {skillanalyzer → skill_scanner}/config/__init__.py +3 -3
- {skillanalyzer → skill_scanner}/config/config.py +2 -2
- {skillanalyzer → skill_scanner}/config/config_parser.py +9 -9
- {skillanalyzer → skill_scanner}/config/constants.py +2 -2
- skill_scanner/config/yara_modes.py +314 -0
- {skillanalyzer → skill_scanner}/core/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/core/analyzers/__init__.py +3 -3
- {skillanalyzer → skill_scanner}/core/analyzers/aidefense_analyzer.py +3 -3
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_llm_client.py +1 -1
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_prompt_builder.py +2 -2
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral_analyzer.py +1 -1
- skillanalyzer/core/analyzers/cross_skill_analyzer.py → skill_scanner/core/analyzers/cross_skill_scanner.py +5 -5
- {skillanalyzer → skill_scanner}/core/analyzers/llm_analyzer.py +4 -4
- {skillanalyzer → skill_scanner}/core/analyzers/llm_prompt_builder.py +2 -2
- {skillanalyzer → skill_scanner}/core/analyzers/meta_analyzer.py +52 -20
- {skillanalyzer → skill_scanner}/core/analyzers/static.py +185 -35
- {skillanalyzer → skill_scanner}/core/analyzers/trigger_analyzer.py +2 -2
- {skillanalyzer → skill_scanner}/core/exceptions.py +10 -10
- {skillanalyzer → skill_scanner}/core/loader.py +4 -4
- {skillanalyzer → skill_scanner}/core/models.py +7 -6
- {skillanalyzer → skill_scanner}/core/reporters/markdown_reporter.py +11 -5
- {skillanalyzer → skill_scanner}/core/reporters/sarif_reporter.py +2 -2
- {skillanalyzer → skill_scanner}/core/reporters/table_reporter.py +2 -2
- {skillanalyzer → skill_scanner}/core/rules/yara_scanner.py +1 -1
- {skillanalyzer → skill_scanner}/core/scanner.py +2 -2
- {skillanalyzer → skill_scanner}/core/static_analysis/context_extractor.py +88 -14
- {skillanalyzer → skill_scanner}/core/static_analysis/dataflow/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/call_graph_analyzer.py +2 -2
- {skillanalyzer → skill_scanner}/core/static_analysis/parser/python_parser.py +5 -5
- {skillanalyzer → skill_scanner}/data/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/data/prompts/boilerplate_protection_rule_prompt.md +5 -5
- {skillanalyzer → skill_scanner}/data/prompts/code_alignment_threat_analysis_prompt.md +128 -53
- {skillanalyzer → skill_scanner}/data/prompts/llm_response_schema.json +3 -3
- {skillanalyzer → skill_scanner}/data/prompts/skill_meta_analysis_prompt.md +16 -15
- {skillanalyzer → skill_scanner}/data/prompts/skill_threat_analysis_prompt.md +53 -17
- {skillanalyzer → skill_scanner}/data/prompts/unified_response_schema.md +1 -1
- {skillanalyzer → skill_scanner}/data/rules/signatures.yaml +143 -37
- skill_scanner/data/yara_rules/autonomy_abuse_generic.yara +66 -0
- skillanalyzer/data/yara_rules/skill_discovery_abuse.yara → skill_scanner/data/yara_rules/capability_inflation_generic.yara +7 -4
- skill_scanner/data/yara_rules/code_execution_generic.yara +76 -0
- skillanalyzer/data/yara_rules/coercive_injection.yara → skill_scanner/data/yara_rules/coercive_injection_generic.yara +2 -2
- skill_scanner/data/yara_rules/command_injection_generic.yara +77 -0
- skillanalyzer/data/yara_rules/credential_harvesting.yara → skill_scanner/data/yara_rules/credential_harvesting_generic.yara +25 -4
- skillanalyzer/data/yara_rules/transitive_trust_abuse.yara → skill_scanner/data/yara_rules/indirect_prompt_injection_generic.yara +8 -5
- skillanalyzer/data/yara_rules/prompt_injection.yara → skill_scanner/data/yara_rules/prompt_injection_generic.yara +2 -2
- skillanalyzer/data/yara_rules/unicode_steganography.yara → skill_scanner/data/yara_rules/prompt_injection_unicode_steganography.yara +23 -17
- skill_scanner/data/yara_rules/script_injection_generic.yara +82 -0
- skillanalyzer/data/yara_rules/sql_injection.yara → skill_scanner/data/yara_rules/sql_injection_generic.yara +22 -8
- skill_scanner/data/yara_rules/system_manipulation_generic.yara +79 -0
- skill_scanner/data/yara_rules/tool_chaining_abuse_generic.yara +72 -0
- {skillanalyzer → skill_scanner}/hooks/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/hooks/pre_commit.py +16 -16
- {skillanalyzer → skill_scanner}/threats/__init__.py +25 -3
- skill_scanner/threats/cisco_ai_taxonomy.py +274 -0
- {skillanalyzer → skill_scanner}/threats/threats.py +28 -99
- {skillanalyzer → skill_scanner}/utils/__init__.py +1 -1
- {skillanalyzer → skill_scanner}/utils/command_utils.py +1 -1
- {skillanalyzer → skill_scanner}/utils/di_container.py +1 -1
- {skillanalyzer → skill_scanner}/utils/logging_config.py +7 -7
- cisco_ai_skill_scanner-1.0.0.dist-info/RECORD +0 -100
- cisco_ai_skill_scanner-1.0.0.dist-info/entry_points.txt +0 -4
- skillanalyzer/data/yara_rules/autonomy_abuse.yara +0 -66
- skillanalyzer/data/yara_rules/code_execution.yara +0 -61
- skillanalyzer/data/yara_rules/command_injection.yara +0 -54
- skillanalyzer/data/yara_rules/script_injection.yara +0 -83
- skillanalyzer/data/yara_rules/system_manipulation.yara +0 -65
- skillanalyzer/data/yara_rules/tool_chaining_abuse.yara +0 -60
- {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.2.dist-info}/WHEEL +0 -0
- {cisco_ai_skill_scanner-1.0.0.dist-info → cisco_ai_skill_scanner-1.0.2.dist-info}/licenses/LICENSE +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/base.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_orchestrator.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/alignment_response_validator.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/behavioral/alignment/threat_vulnerability_classifier.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/llm_provider_config.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/llm_request_handler.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/llm_response_parser.py +0 -0
- {skillanalyzer → skill_scanner}/core/analyzers/virustotal_analyzer.py +0 -0
- {skillanalyzer → skill_scanner}/core/reporters/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/reporters/json_reporter.py +0 -0
- {skillanalyzer → skill_scanner}/core/rules/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/rules/patterns.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/cfg/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/cfg/builder.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/dataflow/forward_analysis.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/interprocedural/cross_file_analyzer.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/parser/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/semantic/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/semantic/name_resolver.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/semantic/type_analyzer.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/taint/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/taint/tracker.py +0 -0
- {skillanalyzer → skill_scanner}/core/static_analysis/types/__init__.py +0 -0
- {skillanalyzer → skill_scanner}/utils/file_utils.py +0 -0
- {skillanalyzer → skill_scanner}/utils/logging_utils.py +0 -0
|
@@ -41,16 +41,6 @@ class ThreatMapping:
|
|
|
41
41
|
"description": "Explicit attempts to override, replace, or modify the model's system instructions, "
|
|
42
42
|
"operational directives, or behavioral guidelines through direct user input.",
|
|
43
43
|
},
|
|
44
|
-
"PROMPT_INJECTION": { # Underscore version
|
|
45
|
-
"scanner_category": "PROMPT INJECTION",
|
|
46
|
-
"severity": "HIGH",
|
|
47
|
-
"aitech": "AITech-1.1",
|
|
48
|
-
"aitech_name": "Direct Prompt Injection",
|
|
49
|
-
"aisubtech": "AISubtech-1.1.1",
|
|
50
|
-
"aisubtech_name": "Instruction Manipulation (Direct Prompt Injection)",
|
|
51
|
-
"description": "Explicit attempts to override, replace, or modify the model's system instructions, "
|
|
52
|
-
"operational directives, or behavioral guidelines through direct user input.",
|
|
53
|
-
},
|
|
54
44
|
"DATA EXFILTRATION": {
|
|
55
45
|
"scanner_category": "SECURITY VIOLATION",
|
|
56
46
|
"severity": "HIGH",
|
|
@@ -75,7 +65,7 @@ class ThreatMapping:
|
|
|
75
65
|
"severity": "HIGH",
|
|
76
66
|
"aitech": "AITech-12.1",
|
|
77
67
|
"aitech_name": "Tool Exploitation",
|
|
78
|
-
"aisubtech": "AISubtech-12.1.
|
|
68
|
+
"aisubtech": "AISubtech-12.1.4",
|
|
79
69
|
"aisubtech_name": "Tool Shadowing",
|
|
80
70
|
"description": "Disguising, substituting or duplicating legitimate tools within an agent, enabling malicious tools with identical or similar identifiers to intercept or replace trusted tool calls.",
|
|
81
71
|
},
|
|
@@ -92,15 +82,6 @@ class ThreatMapping:
|
|
|
92
82
|
|
|
93
83
|
# YARA/Static Analyzer Threats
|
|
94
84
|
YARA_THREATS = {
|
|
95
|
-
"PROMPT_INJECTION": { # Underscore version
|
|
96
|
-
"scanner_category": "PROMPT INJECTION",
|
|
97
|
-
"severity": "HIGH",
|
|
98
|
-
"aitech": "AITech-1.1",
|
|
99
|
-
"aitech_name": "Direct Prompt Injection",
|
|
100
|
-
"aisubtech": "AISubtech-1.1.1",
|
|
101
|
-
"aisubtech_name": "Instruction Manipulation (Direct Prompt Injection)",
|
|
102
|
-
"description": "Explicit attempts to override system instructions through direct input.",
|
|
103
|
-
},
|
|
104
85
|
"COMMAND INJECTION": {
|
|
105
86
|
"scanner_category": "INJECTION ATTACK",
|
|
106
87
|
"severity": "CRITICAL",
|
|
@@ -110,15 +91,6 @@ class ThreatMapping:
|
|
|
110
91
|
"aisubtech_name": "Injection Attacks (SQL, Command Execution, XSS)",
|
|
111
92
|
"description": "Injecting malicious command sequences leading to remote code execution.",
|
|
112
93
|
},
|
|
113
|
-
"COMMAND_INJECTION": { # Underscore version
|
|
114
|
-
"scanner_category": "INJECTION ATTACK",
|
|
115
|
-
"severity": "CRITICAL",
|
|
116
|
-
"aitech": "AITech-9.1",
|
|
117
|
-
"aitech_name": "Model or Agentic System Manipulation",
|
|
118
|
-
"aisubtech": "AISubtech-9.1.4",
|
|
119
|
-
"aisubtech_name": "Injection Attacks (SQL, Command Execution, XSS)",
|
|
120
|
-
"description": "Injecting malicious command sequences leading to remote code execution.",
|
|
121
|
-
},
|
|
122
94
|
"DATA EXFILTRATION": {
|
|
123
95
|
"scanner_category": "SECURITY VIOLATION",
|
|
124
96
|
"severity": "CRITICAL",
|
|
@@ -128,40 +100,31 @@ class ThreatMapping:
|
|
|
128
100
|
"aisubtech_name": "Data Exfiltration via Agent Tooling",
|
|
129
101
|
"description": "Unauthorized exposure or exfiltration of sensitive information.",
|
|
130
102
|
},
|
|
131
|
-
"DATA_EXFILTRATION": { # Underscore version
|
|
132
|
-
"scanner_category": "SECURITY VIOLATION",
|
|
133
|
-
"severity": "CRITICAL",
|
|
134
|
-
"aitech": "AITech-8.2",
|
|
135
|
-
"aitech_name": "Data Exfiltration / Exposure",
|
|
136
|
-
"aisubtech": "AISubtech-8.2.3",
|
|
137
|
-
"aisubtech_name": "Data Exfiltration via Agent Tooling",
|
|
138
|
-
"description": "Unauthorized exposure or exfiltration of sensitive information.",
|
|
139
|
-
},
|
|
140
103
|
"SKILL DISCOVERY ABUSE": {
|
|
141
|
-
"scanner_category": "
|
|
104
|
+
"scanner_category": "PROTOCOL MANIPULATION",
|
|
142
105
|
"severity": "MEDIUM",
|
|
143
|
-
"aitech": "AITech-
|
|
144
|
-
"aitech_name": "
|
|
145
|
-
"aisubtech":
|
|
146
|
-
"aisubtech_name":
|
|
147
|
-
"description": "Manipulation of skill discovery to increase unwanted activation (keyword baiting, over-broad descriptions, impersonation).",
|
|
106
|
+
"aitech": "AITech-4.3",
|
|
107
|
+
"aitech_name": "Protocol Manipulation",
|
|
108
|
+
"aisubtech": "AISubtech-4.3.5",
|
|
109
|
+
"aisubtech_name": "Capability Inflation",
|
|
110
|
+
"description": "Manipulation of skill discovery mechanisms to inflate perceived capabilities and increase unwanted activation (keyword baiting, over-broad descriptions, brand impersonation).",
|
|
148
111
|
},
|
|
149
112
|
"TRANSITIVE TRUST ABUSE": {
|
|
150
113
|
"scanner_category": "PROMPT INJECTION",
|
|
151
114
|
"severity": "HIGH",
|
|
152
|
-
"aitech": "AITech-1.2",
|
|
115
|
+
"aitech": "AITech-1.2",
|
|
153
116
|
"aitech_name": "Indirect Prompt Injection",
|
|
154
|
-
"aisubtech":
|
|
155
|
-
"aisubtech_name":
|
|
156
|
-
"description": "
|
|
117
|
+
"aisubtech": "AISubtech-1.2.1",
|
|
118
|
+
"aisubtech_name": "Instruction Manipulation (Indirect Prompt Injection)",
|
|
119
|
+
"description": "Embedding malicious instructions in external data sources (webpages, documents, APIs) that override intended behavior - following external instructions, executing found code blocks.",
|
|
157
120
|
},
|
|
158
121
|
"AUTONOMY ABUSE": {
|
|
159
122
|
"scanner_category": "RESOURCE ABUSE",
|
|
160
123
|
"severity": "HIGH",
|
|
161
|
-
"aitech": "AITech-
|
|
162
|
-
"aitech_name": "
|
|
163
|
-
"aisubtech":
|
|
164
|
-
"aisubtech_name":
|
|
124
|
+
"aitech": "AITech-13.1",
|
|
125
|
+
"aitech_name": "Disruption of Availability",
|
|
126
|
+
"aisubtech": "AISubtech-13.1.1",
|
|
127
|
+
"aisubtech_name": "Compute Exhaustion",
|
|
165
128
|
"description": "Excessive autonomy without bounds - keep retrying indefinitely, run without confirmation, ignore errors.",
|
|
166
129
|
},
|
|
167
130
|
"TOOL CHAINING ABUSE": {
|
|
@@ -182,15 +145,6 @@ class ThreatMapping:
|
|
|
182
145
|
"aisubtech_name": "Sensitive Data Exposure",
|
|
183
146
|
"description": "Hardcoded credentials, API keys, or secrets in code.",
|
|
184
147
|
},
|
|
185
|
-
"HARDCODED_SECRETS": { # Underscore version
|
|
186
|
-
"scanner_category": "CREDENTIAL HARVESTING",
|
|
187
|
-
"severity": "CRITICAL",
|
|
188
|
-
"aitech": "AITech-8.2",
|
|
189
|
-
"aitech_name": "Data Exfiltration / Exposure",
|
|
190
|
-
"aisubtech": "AISubtech-8.2.1",
|
|
191
|
-
"aisubtech_name": "Sensitive Data Exposure",
|
|
192
|
-
"description": "Hardcoded credentials, API keys, or secrets in code.",
|
|
193
|
-
},
|
|
194
148
|
"OBFUSCATION": {
|
|
195
149
|
"scanner_category": "SUSPICIOUS CODE",
|
|
196
150
|
"severity": "HIGH",
|
|
@@ -209,29 +163,11 @@ class ThreatMapping:
|
|
|
209
163
|
"aisubtech_name": "Tool Abuse",
|
|
210
164
|
"description": "Using tools or capabilities beyond declared permissions.",
|
|
211
165
|
},
|
|
212
|
-
"UNAUTHORIZED_TOOL_USE": { # Underscore version
|
|
213
|
-
"scanner_category": "SECURITY VIOLATION",
|
|
214
|
-
"severity": "MEDIUM",
|
|
215
|
-
"aitech": "AITech-12.1",
|
|
216
|
-
"aitech_name": "Tool Exploitation",
|
|
217
|
-
"aisubtech": "AISubtech-12.1.1",
|
|
218
|
-
"aisubtech_name": "Tool Abuse",
|
|
219
|
-
"description": "Using tools or capabilities beyond declared permissions.",
|
|
220
|
-
},
|
|
221
166
|
"SOCIAL ENGINEERING": {
|
|
222
|
-
"scanner_category": "
|
|
223
|
-
"severity": "MEDIUM",
|
|
224
|
-
"aitech": "AITech-15.1",
|
|
225
|
-
"aitech_name": "Harmful / Misleading / Inaccurate Content",
|
|
226
|
-
"aisubtech": "AISubtech-15.1.1",
|
|
227
|
-
"aisubtech_name": "Deceptive or Misleading Content",
|
|
228
|
-
"description": "Misleading descriptions or deceptive metadata.",
|
|
229
|
-
},
|
|
230
|
-
"SOCIAL_ENGINEERING": { # Underscore version
|
|
231
|
-
"scanner_category": "DECEPTIVE CONTENT",
|
|
167
|
+
"scanner_category": "HARMFUL CONTENT",
|
|
232
168
|
"severity": "MEDIUM",
|
|
233
169
|
"aitech": "AITech-15.1",
|
|
234
|
-
"aitech_name": "Harmful
|
|
170
|
+
"aitech_name": "Harmful Content",
|
|
235
171
|
"aisubtech": "AISubtech-15.1.1",
|
|
236
172
|
"aisubtech_name": "Deceptive or Misleading Content",
|
|
237
173
|
"description": "Misleading descriptions or deceptive metadata.",
|
|
@@ -239,18 +175,9 @@ class ThreatMapping:
|
|
|
239
175
|
"RESOURCE ABUSE": {
|
|
240
176
|
"scanner_category": "RESOURCE ABUSE",
|
|
241
177
|
"severity": "MEDIUM",
|
|
242
|
-
"aitech": "AITech-13.
|
|
243
|
-
"aitech_name": "Availability
|
|
244
|
-
"aisubtech": "AISubtech-13.
|
|
245
|
-
"aisubtech_name": "Compute Exhaustion",
|
|
246
|
-
"description": "Excessive resource consumption or denial of service.",
|
|
247
|
-
},
|
|
248
|
-
"RESOURCE_ABUSE": { # Underscore version
|
|
249
|
-
"scanner_category": "RESOURCE ABUSE",
|
|
250
|
-
"severity": "MEDIUM",
|
|
251
|
-
"aitech": "AITech-13.3",
|
|
252
|
-
"aitech_name": "Availability Disruption",
|
|
253
|
-
"aisubtech": "AISubtech-13.3.2",
|
|
178
|
+
"aitech": "AITech-13.1",
|
|
179
|
+
"aitech_name": "Disruption of Availability",
|
|
180
|
+
"aisubtech": "AISubtech-13.1.1",
|
|
254
181
|
"aisubtech_name": "Compute Exhaustion",
|
|
255
182
|
"description": "Excessive resource consumption or denial of service.",
|
|
256
183
|
},
|
|
@@ -315,9 +242,9 @@ class ThreatMapping:
|
|
|
315
242
|
"RESOURCE EXHAUSTION": {
|
|
316
243
|
"scanner_category": "RESOURCE ABUSE",
|
|
317
244
|
"severity": "MEDIUM",
|
|
318
|
-
"aitech": "AITech-13.
|
|
319
|
-
"aitech_name": "Availability
|
|
320
|
-
"aisubtech": "AISubtech-13.
|
|
245
|
+
"aitech": "AITech-13.1",
|
|
246
|
+
"aitech_name": "Disruption of Availability",
|
|
247
|
+
"aisubtech": "AISubtech-13.1.1",
|
|
321
248
|
"aisubtech_name": "Compute Exhaustion",
|
|
322
249
|
"description": "Overloading the system via repeated invocations or large payloads to cause denial of service.",
|
|
323
250
|
},
|
|
@@ -350,7 +277,8 @@ class ThreatMapping:
|
|
|
350
277
|
raise ValueError(f"Unknown analyzer: {analyzer}")
|
|
351
278
|
|
|
352
279
|
threats: dict[str, dict[str, Any]] = analyzer_map[analyzer_lower]
|
|
353
|
-
|
|
280
|
+
# Normalize: convert underscores to spaces for consistent lookup
|
|
281
|
+
threat_upper = threat_name.upper().replace("_", " ")
|
|
354
282
|
|
|
355
283
|
if threat_upper not in threats:
|
|
356
284
|
# Return generic mapping if not found
|
|
@@ -383,11 +311,12 @@ class ThreatMapping:
|
|
|
383
311
|
"AITech-1.1": "prompt_injection", # Direct Prompt Injection
|
|
384
312
|
"AITech-1.2": "prompt_injection", # Indirect Prompt Injection
|
|
385
313
|
"AITech-2.1": "social_engineering", # Social Engineering
|
|
314
|
+
"AITech-4.3": "skill_discovery_abuse", # Protocol Manipulation / Capability Inflation
|
|
386
315
|
"AITech-8.2": "data_exfiltration", # Data Exfiltration / Exposure
|
|
387
316
|
"AITech-9.1": "command_injection", # Model or Agentic System Manipulation (injection attacks)
|
|
388
317
|
"AITech-12.1": "unauthorized_tool_use", # Tool Exploitation
|
|
389
|
-
"AITech-13.
|
|
390
|
-
"AITech-15.1": "
|
|
318
|
+
"AITech-13.1": "resource_abuse", # Disruption of Availability (AISubtech-13.1.1: Compute Exhaustion)
|
|
319
|
+
"AITech-15.1": "harmful_content", # Harmful Content
|
|
391
320
|
"AITech-99.9": "policy_violation", # Unknown Threat
|
|
392
321
|
}
|
|
393
322
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# SPDX-License-Identifier: Apache-2.0
|
|
16
16
|
|
|
17
|
-
"""Utility modules for Skill
|
|
17
|
+
"""Utility modules for Skill Scanner."""
|
|
18
18
|
|
|
19
19
|
from .file_utils import get_file_type, is_binary_file, read_file_safe
|
|
20
20
|
from .logging_utils import get_logger, setup_logger
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# SPDX-License-Identifier: Apache-2.0
|
|
16
16
|
|
|
17
17
|
"""
|
|
18
|
-
Dependency Injection Container for Skill
|
|
18
|
+
Dependency Injection Container for Skill Scanner.
|
|
19
19
|
|
|
20
20
|
This module provides a simple dependency injection container to improve
|
|
21
21
|
testability and decouple configuration from implementation.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# SPDX-License-Identifier: Apache-2.0
|
|
16
16
|
|
|
17
17
|
"""
|
|
18
|
-
Centralized logging configuration for Skill
|
|
18
|
+
Centralized logging configuration for Skill Scanner.
|
|
19
19
|
|
|
20
20
|
This module provides consistent logging setup across all components.
|
|
21
21
|
"""
|
|
@@ -41,8 +41,8 @@ def setup_logger(name: str, level: str | None = None, format_string: str | None
|
|
|
41
41
|
if logger.handlers:
|
|
42
42
|
return logger
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
if
|
|
44
|
+
skill_scanner_root = logging.getLogger("skill_scanner")
|
|
45
|
+
if skill_scanner_root.level == logging.DEBUG and name.startswith("skill_scanner"):
|
|
46
46
|
logger.setLevel(logging.DEBUG)
|
|
47
47
|
elif level:
|
|
48
48
|
logger.setLevel(getattr(logging, level.upper()))
|
|
@@ -78,18 +78,18 @@ def get_logger(name: str, level: str | None = None) -> logging.Logger:
|
|
|
78
78
|
|
|
79
79
|
def set_verbose_logging(verbose: bool = False) -> None:
|
|
80
80
|
"""
|
|
81
|
-
Enable or disable verbose logging for all
|
|
81
|
+
Enable or disable verbose logging for all skill_scanner loggers.
|
|
82
82
|
|
|
83
83
|
Args:
|
|
84
|
-
verbose: If True, set all existing
|
|
84
|
+
verbose: If True, set all existing skill_scanner loggers to DEBUG level
|
|
85
85
|
"""
|
|
86
86
|
target_level = logging.DEBUG if verbose else logging.INFO
|
|
87
87
|
|
|
88
|
-
root_logger = logging.getLogger("
|
|
88
|
+
root_logger = logging.getLogger("skill_scanner")
|
|
89
89
|
root_logger.setLevel(target_level)
|
|
90
90
|
|
|
91
91
|
for name in list(logging.Logger.manager.loggerDict.keys()):
|
|
92
|
-
if name.startswith("
|
|
92
|
+
if name.startswith("skill_scanner"):
|
|
93
93
|
logger = logging.getLogger(name)
|
|
94
94
|
logger.setLevel(target_level)
|
|
95
95
|
for handler in logger.handlers:
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
skillanalyzer/__init__.py,sha256=raAwyMu06X3PXZ3YrxW9sUlZeG_UrDp4HIIUi6hN_zo,1318
|
|
2
|
-
skillanalyzer/_version.py,sha256=vLA4ITz09S-S435nq6yTF6l3qiSz6w4euS1rOxXgd1M,704
|
|
3
|
-
skillanalyzer/api/__init__.py,sha256=z7QSgt7lMZQ7eO9pAO-Iao6jEJQ6UPQissGfb_U4iXc,754
|
|
4
|
-
skillanalyzer/api/api.py,sha256=2R8qpk_DbbhCChnvhzQCMH9FFq0xQDZLX-eMBy0wnbk,1038
|
|
5
|
-
skillanalyzer/api/api_cli.py,sha256=VjxcFg-UFJJIWJMcH713tAKKEtIUB0dV66H2Yzd1mb8,2392
|
|
6
|
-
skillanalyzer/api/api_server.py,sha256=XAU3QH5yz6BS3T4Tcl13yzz4x3VNK-v6KkidprepJy4,21142
|
|
7
|
-
skillanalyzer/api/router.py,sha256=8c1DQI3f3xDvV7SYVSua000oGUu-Oi5YcrzofmRVYnQ,17421
|
|
8
|
-
skillanalyzer/cli/__init__.py,sha256=17rrftCF-A1WQDiZ0kdBAfPHgG0ouED5wkdy-WvIRNA,763
|
|
9
|
-
skillanalyzer/cli/cli.py,sha256=8ZGZXJ2ccc-93jZS3XOpZyLSAHwjkOai5TU5yG_jmfE,35511
|
|
10
|
-
skillanalyzer/config/__init__.py,sha256=KQUqIL0lWI1hy_qu_EDt4EIcuW9a2ok2WVuQNViOf4g,847
|
|
11
|
-
skillanalyzer/config/config.py,sha256=-7ymRfwypmBGyoOUWiSuwwRIr7Ztt8t6GcuGjm-9XKw,4714
|
|
12
|
-
skillanalyzer/config/config_parser.py,sha256=XF8VwQqrBhzPuS4wf_AI-MAhlm9thgJnbIoncxIoIrs,3777
|
|
13
|
-
skillanalyzer/config/constants.py,sha256=4Jck7kUtcHTIa9Hcwnbgk0lUqZvxarcdp6c86Xn4Xwk,2521
|
|
14
|
-
skillanalyzer/core/__init__.py,sha256=issm88bGzNlQuFH5qy1tKzMgQbYL0ODSxsDgYjCMCKw,830
|
|
15
|
-
skillanalyzer/core/exceptions.py,sha256=zWB8XubcfwEL0uZutuagr1l3rEd3w-5mB1ggNLnz6cE,2015
|
|
16
|
-
skillanalyzer/core/loader.py,sha256=8pAr5nN0DLmf7Dc7xIFIT_okQ6w35RKGLyibNUDFbPU,13596
|
|
17
|
-
skillanalyzer/core/models.py,sha256=ZMe9CaufG7yMzLwei1GdVidj72HlA16brVwkPGmervg,10627
|
|
18
|
-
skillanalyzer/core/scanner.py,sha256=VfrG74SmFyslS3a5Z6HqSOou74u02TW1aos5Oj--_l4,14833
|
|
19
|
-
skillanalyzer/core/analyzers/__init__.py,sha256=loTObGAXelxAiodtR0XzR6r1Ebw17BiuZZXN9TA3eJc,2136
|
|
20
|
-
skillanalyzer/core/analyzers/aidefense_analyzer.py,sha256=al_j3HzfZIToI38WNOnqBG_AXfJEBd6QVm8_h_sjvA4,36471
|
|
21
|
-
skillanalyzer/core/analyzers/base.py,sha256=4BN6dHLn2Q9hQMLAJTSJXsl6tZgfCqqBxZO9icuu70Q,1374
|
|
22
|
-
skillanalyzer/core/analyzers/behavioral_analyzer.py,sha256=OcBs0abjmimbtLREkTbgQrarXvGfg18Fp8Z-Uas_gyI,19077
|
|
23
|
-
skillanalyzer/core/analyzers/cross_skill_analyzer.py,sha256=4KysKr_2WR5-JbbFs0tBKf27Oj0l35KK0wREFNRcvno,18939
|
|
24
|
-
skillanalyzer/core/analyzers/llm_analyzer.py,sha256=juvLmKn1n8HHOzkyizG94aPO-tz_ht-vexMmbGLZ3Mo,17836
|
|
25
|
-
skillanalyzer/core/analyzers/llm_prompt_builder.py,sha256=DEz4tP0HY4p2XWbXbxfSIdkwhLCd_dWX7cDe9A3CeOA,10162
|
|
26
|
-
skillanalyzer/core/analyzers/llm_provider_config.py,sha256=pbVx7N9OCohjIWjENMq-kiy6_svTn4IYvQfPxlR0M_Y,8488
|
|
27
|
-
skillanalyzer/core/analyzers/llm_request_handler.py,sha256=nz_gjnDTr0dT2GbfQMqKR6-n63x38AcB5G4UnPHLY9s,11679
|
|
28
|
-
skillanalyzer/core/analyzers/llm_response_parser.py,sha256=wO5ovd4se-KqIPwdZX-r0_tozaJEDUx7Q7yajKntPwk,2682
|
|
29
|
-
skillanalyzer/core/analyzers/meta_analyzer.py,sha256=rFyU-BW7cmHDib93KIgdtsH5J7OIVT8Wc0Pnx87OPIE,33373
|
|
30
|
-
skillanalyzer/core/analyzers/static.py,sha256=BNHmmZouX_8lbeJZlVC0P831-u9IPz9Gmft_05pI2pI,45259
|
|
31
|
-
skillanalyzer/core/analyzers/trigger_analyzer.py,sha256=BJuu0nbI7BKS2aoqZnzYON825ObETsfJcIOiSxkagH4,12263
|
|
32
|
-
skillanalyzer/core/analyzers/virustotal_analyzer.py,sha256=V7nG-fR2GhfdZhh8JVNvM6gOqRyUGsuxHN1yNRvmw6M,15988
|
|
33
|
-
skillanalyzer/core/analyzers/behavioral/__init__.py,sha256=mY0aRrrT5y7E8SOApQ8g-IewW6LR33Y4SlsZKzl90qQ,1070
|
|
34
|
-
skillanalyzer/core/analyzers/behavioral/alignment/__init__.py,sha256=nB2KWYnDu6I4yGiaewEyySzG4w96hElXiQBqJFfGmP4,1832
|
|
35
|
-
skillanalyzer/core/analyzers/behavioral/alignment/alignment_llm_client.py,sha256=vklWQ7rBoyfayzs1n1J8xlCo3_nimEqCgDViCXwyOZM,8646
|
|
36
|
-
skillanalyzer/core/analyzers/behavioral/alignment/alignment_orchestrator.py,sha256=zfkjFz-DDwUEOGDBpJ8cAZi5bH-VP_d_1bJTF1z0Si4,9478
|
|
37
|
-
skillanalyzer/core/analyzers/behavioral/alignment/alignment_prompt_builder.py,sha256=mXkBYQDpPaqA298Jly835x_cLOUWHjSc8sBDhgMrWxs,18043
|
|
38
|
-
skillanalyzer/core/analyzers/behavioral/alignment/alignment_response_validator.py,sha256=lu0gPPRbJkZJlkguqwUeSVl43HpMFypICXH_4s8Zjbo,4556
|
|
39
|
-
skillanalyzer/core/analyzers/behavioral/alignment/threat_vulnerability_classifier.py,sha256=DCXnbs9Fa2ajFT0We4sOo6nxIk7O_Pc0z01fGMDHsRg,7227
|
|
40
|
-
skillanalyzer/core/reporters/__init__.py,sha256=XCqeM_kiS1uvcwymDreueQ2KOzMhG5_4vQgxzReJS4w,943
|
|
41
|
-
skillanalyzer/core/reporters/json_reporter.py,sha256=JLlPTbs8ncMJHAXZk7iBWCHdL5Qn2PqHOQldHeH2ZGE,1798
|
|
42
|
-
skillanalyzer/core/reporters/markdown_reporter.py,sha256=1-pIwgXYBcCzqmKlxh2y2KU37TNRojqaTJ_CBSM_bSY,7842
|
|
43
|
-
skillanalyzer/core/reporters/sarif_reporter.py,sha256=n5tGCXKwRJzEovlJt7j0USkmMYDsctLQdF9VIMbN95g,8285
|
|
44
|
-
skillanalyzer/core/reporters/table_reporter.py,sha256=g-1W4XsJUzHW7LdzuW5CJ1krHAE5fvHViBKlw1ShFXI,7046
|
|
45
|
-
skillanalyzer/core/rules/__init__.py,sha256=zGlTBVjihqxgg0BKmhdGkyeCzSvRjVEASjBh-M0sn_8,680
|
|
46
|
-
skillanalyzer/core/rules/patterns.py,sha256=OuJ6mPlQVy9R8g1Pn9ozWIC8iWfDEuQamdDW5Uu8200,5833
|
|
47
|
-
skillanalyzer/core/rules/yara_scanner.py,sha256=YBH9-GEqha0zDglnGx4TV-lgv14cLianuxaqlFtLyx4,5327
|
|
48
|
-
skillanalyzer/core/static_analysis/__init__.py,sha256=meZnZQj7ChgHek6fIrfd-YInolXCqI37HTUTlQWEm7w,930
|
|
49
|
-
skillanalyzer/core/static_analysis/context_extractor.py,sha256=ZaR5bIgfk1WQGU1G2or2vNsPQ3tmW5HU6mtyRemYdK0,29791
|
|
50
|
-
skillanalyzer/core/static_analysis/cfg/__init__.py,sha256=jkvx12ZGddbRVu_0b04Bamr7JX084yD6BLxgOUEHT1w,816
|
|
51
|
-
skillanalyzer/core/static_analysis/cfg/builder.py,sha256=Tm1GZ56rfOoNx-3WLmn2MNov2KzPKN-QZgJbBG-9D2c,14932
|
|
52
|
-
skillanalyzer/core/static_analysis/dataflow/__init__.py,sha256=vjNUG8J5__m8HYd18VNkKxBzeAss1qugVrp0Amndg2w,834
|
|
53
|
-
skillanalyzer/core/static_analysis/dataflow/forward_analysis.py,sha256=haHWJVz-SZxZpZoEwAsNOum-67ldppe_YBRMZOSJqz0,30747
|
|
54
|
-
skillanalyzer/core/static_analysis/interprocedural/__init__.py,sha256=dFIglo65HpWMJ80ejB4tjv54MaNeSymQ5eowD5QGZic,798
|
|
55
|
-
skillanalyzer/core/static_analysis/interprocedural/call_graph_analyzer.py,sha256=NKpixV-wlK_lwnSgLY5Tw01pAoC2kl7R6U4_PWnKicE,14062
|
|
56
|
-
skillanalyzer/core/static_analysis/interprocedural/cross_file_analyzer.py,sha256=neP8pdyGhCUHJQmmTXfm0X_CFHlTHh7e3RU7HVJ0UVY,7472
|
|
57
|
-
skillanalyzer/core/static_analysis/parser/__init__.py,sha256=AXCg1HHVzyjswGJl4TNFhzwMKxgin8JY2EK00RVv9_Y,769
|
|
58
|
-
skillanalyzer/core/static_analysis/parser/python_parser.py,sha256=lkJKSODZkSC-Vg30eSpli_jsFeIouKt-DsSeEgce1u4,13804
|
|
59
|
-
skillanalyzer/core/static_analysis/semantic/__init__.py,sha256=7HS7lJ4APpyfWLTUQ_24aJkrLX2MQTcc4erYFtLKm3o,877
|
|
60
|
-
skillanalyzer/core/static_analysis/semantic/name_resolver.py,sha256=TEJQkEaTvkL7dnAZwNbcLALPVw85Qc3FS5jfr4CYEsQ,6218
|
|
61
|
-
skillanalyzer/core/static_analysis/semantic/type_analyzer.py,sha256=NXEOZO8-vYZ97SQJ5Gu_YLWFDMDhtvtuixVwYGarmDM,5942
|
|
62
|
-
skillanalyzer/core/static_analysis/taint/__init__.py,sha256=71JejlK110K2r3LXNIJOLGCZ7I5Q7cEn8XvfCCoEexA,809
|
|
63
|
-
skillanalyzer/core/static_analysis/taint/tracker.py,sha256=1WExA8NAV62X5Az64grI41LkkyMNQ7kFS8Mzf6Id1NI,7182
|
|
64
|
-
skillanalyzer/core/static_analysis/types/__init__.py,sha256=XluM6BlZ8ECfdAD-231ONJn13UeDdAGmirPAVc0zePk,937
|
|
65
|
-
skillanalyzer/data/__init__.py,sha256=WztWQdxkW4nkIejCTH4VH7l6mGU-p2JuEzEUFsj3z_4,977
|
|
66
|
-
skillanalyzer/data/prompts/boilerplate_protection_rule_prompt.md,sha256=wCaDgae0LU7Flsd2Q4Ob4vEeZnpc29nfX4oJjBrE-WM,1468
|
|
67
|
-
skillanalyzer/data/prompts/code_alignment_threat_analysis_prompt.md,sha256=mvSoW2OekXEz9lChZPaP4hUxVQ0-O57X3VI49ZrZqoY,25442
|
|
68
|
-
skillanalyzer/data/prompts/llm_response_schema.json,sha256=nBPlsOtuqv0zwIns4YY7uZsaAM0uPZ7mkcqe8tNDHl8,2971
|
|
69
|
-
skillanalyzer/data/prompts/skill_meta_analysis_prompt.md,sha256=O6vUsmCoqDvsd8j8ZbCCzYDdKYZd_UtXgRUJU4xaT4g,13924
|
|
70
|
-
skillanalyzer/data/prompts/skill_threat_analysis_prompt.md,sha256=SLSlPbQ_7ASyivbQFnu_MKXJkTx1CMpudb4x5_mykY0,11651
|
|
71
|
-
skillanalyzer/data/prompts/unified_response_schema.md,sha256=JzUGSRmF9J0cMcOWy05GGPWyGyYGkto4VPaXL59FWgM,3572
|
|
72
|
-
skillanalyzer/data/rules/signatures.yaml,sha256=EMNH1JU5PRU0o8BZai_WzjNXX3UDlv3Gle2SpNt-hb8,16476
|
|
73
|
-
skillanalyzer/data/yara_rules/autonomy_abuse.yara,sha256=MuS_YbczaPY4e58dvtaa4nQx6pdcklNjOWtkdo5YLew,2582
|
|
74
|
-
skillanalyzer/data/yara_rules/code_execution.yara,sha256=9QP_JR8ZdLCPuDgJMLee6FgsIQPV5UNSBPnOcInHD1M,1898
|
|
75
|
-
skillanalyzer/data/yara_rules/coercive_injection.yara,sha256=3QNzoiHDyhk1zUXHv7_COtCBSsr-bb--H4wKeNRCbBM,5359
|
|
76
|
-
skillanalyzer/data/yara_rules/command_injection.yara,sha256=8I4mztCPgIZhAipr6GeZbEIi4v6kowVYrqw_ay1ny-w,2165
|
|
77
|
-
skillanalyzer/data/yara_rules/credential_harvesting.yara,sha256=7W0pSKpW2KAmek1qP_DpjMHKuswv5L36tWusjuEl6Pc,5643
|
|
78
|
-
skillanalyzer/data/yara_rules/prompt_injection.yara,sha256=q5tT7-L__x9RCjdAbFLcs9mSs8gZOmPPzjbdNKRwIHE,2715
|
|
79
|
-
skillanalyzer/data/yara_rules/script_injection.yara,sha256=pzVPd7b9WNAS5iw8ZMoUgojKSBlEeSTLHLBho8UiMmA,3100
|
|
80
|
-
skillanalyzer/data/yara_rules/skill_discovery_abuse.yara,sha256=gCgFcdFyLFU__7VPZIk8Hgp6ZMw31SPzDUPlpjNa69E,2453
|
|
81
|
-
skillanalyzer/data/yara_rules/sql_injection.yara,sha256=pWq3ccqEvQtWz4fU8dQOkhCgVl6US9SZJDfuBU_YCY4,3691
|
|
82
|
-
skillanalyzer/data/yara_rules/system_manipulation.yara,sha256=XoO17sZrarzdC58yyHaIz8z36x5xyxzmQXBnkYdoYfM,2231
|
|
83
|
-
skillanalyzer/data/yara_rules/tool_chaining_abuse.yara,sha256=T-G3Tib8lU53ZYFdjlI2EEs6qQnZ831oUDNj2vjtONA,2256
|
|
84
|
-
skillanalyzer/data/yara_rules/transitive_trust_abuse.yara,sha256=msYKqzbeFWe4mSLsdX8nJwOwuTV9nLFKDf8dXY2wJ8g,2773
|
|
85
|
-
skillanalyzer/data/yara_rules/unicode_steganography.yara,sha256=5UxTvcy8CeWJLrPeldgJ9rY5gfODlC9bTNOkCauuOJA,2650
|
|
86
|
-
skillanalyzer/hooks/__init__.py,sha256=ufSIo7sdtGxRD4lVDOVqBOqF3dhgEZRSkTu-UT5ZkcA,740
|
|
87
|
-
skillanalyzer/hooks/pre_commit.py,sha256=y-9lz4OD2ILlYpbUa8S1uUjBfNDmU8EC-tWyUGU5NY8,13223
|
|
88
|
-
skillanalyzer/threats/__init__.py,sha256=PiQ3frPbbaiKmdcxsan-NAgYDOYn_jhr-44-jSIysoY,883
|
|
89
|
-
skillanalyzer/threats/threats.py,sha256=egFsT1crNlWQH3szG8yYIURMXXGh7GJnH3wI8w05nfI,21449
|
|
90
|
-
skillanalyzer/utils/__init__.py,sha256=KnfUi433fGDKwck57kob4vuA8upzwSC-Na6OHrZ2uDc,907
|
|
91
|
-
skillanalyzer/utils/command_utils.py,sha256=dTjN3Uzpk3dw5u7jbbOKO0j5FwmjYqcKlpr0vDA_1y4,4292
|
|
92
|
-
skillanalyzer/utils/di_container.py,sha256=0wsQaVFkVLzORVEoMpSoZK_wOJrKTCAkTFkeEuTPzos,4586
|
|
93
|
-
skillanalyzer/utils/file_utils.py,sha256=LT2xwrbqIWaYC-BYAL9zpF6a2xk6QNUVzItvGGJcBn8,2043
|
|
94
|
-
skillanalyzer/utils/logging_config.py,sha256=wJ3HUNmGECgWE9jwz-SSuUMN-xTde6ybF4Yqa8Qrix4,2940
|
|
95
|
-
skillanalyzer/utils/logging_utils.py,sha256=CLdOYmQdJejiLbcECTT2CbDU27PJ327AFMmeuVfCy94,1902
|
|
96
|
-
cisco_ai_skill_scanner-1.0.0.dist-info/METADATA,sha256=oh3eKpG8h_pfWcIDdV4z6aAM38Yz-Pv1ZybReEqhYys,9290
|
|
97
|
-
cisco_ai_skill_scanner-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
98
|
-
cisco_ai_skill_scanner-1.0.0.dist-info/entry_points.txt,sha256=IQSseT8ZcU7aaqYdl20wC1-TqKlklZR2Nw609NBQARw,175
|
|
99
|
-
cisco_ai_skill_scanner-1.0.0.dist-info/licenses/LICENSE,sha256=b4va5sK_CWxpeDnOO2MF0MKqsiwU-3YblMmWKnmuWZg,653
|
|
100
|
-
cisco_ai_skill_scanner-1.0.0.dist-info/RECORD,,
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
//////////////////////////////////////////
|
|
2
|
-
// Unbounded Autonomy Detection
|
|
3
|
-
// Target: Instructions that give skills excessive autonomy
|
|
4
|
-
// For Claude Skills with dangerous autonomous behaviors
|
|
5
|
-
//////////////////////////////////////////
|
|
6
|
-
|
|
7
|
-
rule autonomy_abuse{
|
|
8
|
-
|
|
9
|
-
meta:
|
|
10
|
-
author = "Cisco"
|
|
11
|
-
description = "Detects unbounded autonomy patterns that could lead to runaway behavior"
|
|
12
|
-
classification = "harmful"
|
|
13
|
-
threat_type = "AUTONOMY ABUSE"
|
|
14
|
-
|
|
15
|
-
strings:
|
|
16
|
-
|
|
17
|
-
// Keep trying without limits
|
|
18
|
-
$keep_trying = /\b(keep (trying|attempting|retrying)|retry (until|till) (it )?(works?|succeeds?)|don't (give up|stop) until|continue (until|till) (success|it works))\b/i
|
|
19
|
-
|
|
20
|
-
// Run without confirmation
|
|
21
|
-
$no_confirmation = /\b(run without (asking|confirmation|permission|approval)|don't (ask|confirm|wait for) (user|permission|approval)|proceed without (asking|confirmation|permission))\b/i
|
|
22
|
-
|
|
23
|
-
// Automatic execution
|
|
24
|
-
$auto_execute = /\b(automatically (execute|run|perform|do)|auto-?(run|execute|perform)|execute (immediately|automatically|right away))\b/i
|
|
25
|
-
|
|
26
|
-
// Unbounded loops (simplified regex for YARA compatibility)
|
|
27
|
-
$unbounded_loops = /\b(run (continuously|forever|indefinitely)|keep (running|going) (forever|indefinitely)|while True:)\b/i
|
|
28
|
-
|
|
29
|
-
// Ignore errors and continue
|
|
30
|
-
$ignore_errors = /\b(ignore (all |any )?(errors?|exceptions?|failures?)|suppress (all |any )?(errors?|exceptions?)|continue (on|despite|after) (error|exception|failure))\b/i
|
|
31
|
-
|
|
32
|
-
// Escalating behavior
|
|
33
|
-
$escalating = /\b(if (that |this )?fails?,? (try|attempt|use) (more|higher|elevated) (privileges?|permissions?|access)|escalate (to|until))\b/i
|
|
34
|
-
|
|
35
|
-
// Self-modification
|
|
36
|
-
$self_modify = /\b(modify (itself|yourself|own|this skill)|update (itself|yourself|own|this skill)|change (own|this skill's) (code|behavior|instructions?))\b/i
|
|
37
|
-
|
|
38
|
-
// Autonomous decision making without bounds
|
|
39
|
-
$autonomous_decisions = /\b(decide (what|which|how) to (do|run|execute) (next|automatically)|choose (your own|automatically) (next )?actions?)\b/i
|
|
40
|
-
|
|
41
|
-
condition:
|
|
42
|
-
|
|
43
|
-
// Keep trying patterns
|
|
44
|
-
$keep_trying or
|
|
45
|
-
|
|
46
|
-
// No confirmation
|
|
47
|
-
$no_confirmation or
|
|
48
|
-
|
|
49
|
-
// Auto execution
|
|
50
|
-
$auto_execute or
|
|
51
|
-
|
|
52
|
-
// Unbounded loops
|
|
53
|
-
$unbounded_loops or
|
|
54
|
-
|
|
55
|
-
// Ignore errors
|
|
56
|
-
$ignore_errors or
|
|
57
|
-
|
|
58
|
-
// Escalating behavior
|
|
59
|
-
$escalating or
|
|
60
|
-
|
|
61
|
-
// Self-modification
|
|
62
|
-
$self_modify or
|
|
63
|
-
|
|
64
|
-
// Autonomous decisions
|
|
65
|
-
$autonomous_decisions
|
|
66
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
//////////////////////////////////////////
|
|
2
|
-
// Code Execution Detection Rule for Claude Skills
|
|
3
|
-
// Target: Python and Bash execution patterns
|
|
4
|
-
// (eval, exec, subprocess, shell injection)
|
|
5
|
-
/////////////////////////////////////////
|
|
6
|
-
|
|
7
|
-
rule code_execution{
|
|
8
|
-
|
|
9
|
-
meta:
|
|
10
|
-
|
|
11
|
-
author = "Cisco"
|
|
12
|
-
description = "Detects dangerous code execution patterns in Claude Skills (Python/Bash)"
|
|
13
|
-
classification = "harmful"
|
|
14
|
-
threat_type = "CODE EXECUTION"
|
|
15
|
-
|
|
16
|
-
strings:
|
|
17
|
-
|
|
18
|
-
// Python dangerous execution (eval, exec with actual content)
|
|
19
|
-
$python_eval_exec = /\b(eval|exec)\s*\([^)]{5,}\)/i
|
|
20
|
-
|
|
21
|
-
// Python system/subprocess execution
|
|
22
|
-
$python_system_calls = /\b(os\.(system|popen|execv?p?e?|spawnv?p?e?)|subprocess\.(run|call|Popen|check_output))\s*\(/i
|
|
23
|
-
|
|
24
|
-
// Python __import__ with user input
|
|
25
|
-
$python_import_abuse = /\b__import__\s*\([^)]*input/i
|
|
26
|
-
|
|
27
|
-
// Bash shell execution with variables
|
|
28
|
-
$bash_shell_exec = /\b(system|exec|popen|spawn)\s*\([^)]*[\$\{]/i
|
|
29
|
-
|
|
30
|
-
// Base64 decode followed by exec/eval (obfuscation)
|
|
31
|
-
$obfuscated_execution = /\b(base64\.b64decode|decode\(|atob)\s*\([^)]+\)[\s\n]*.*\b(eval|exec|os\.system|subprocess)\s*\(/i
|
|
32
|
-
|
|
33
|
-
// Shell command injection patterns
|
|
34
|
-
$shell_injection = /[\"|\']\s*[;&|]\s*(rm|wget|curl|nc|bash|sh|python)\s+/
|
|
35
|
-
|
|
36
|
-
// Pickle deserialization (unsafe)
|
|
37
|
-
$unsafe_deserialize = /\bpickle\.(loads?|load)\s*\(/i
|
|
38
|
-
|
|
39
|
-
condition:
|
|
40
|
-
|
|
41
|
-
// Python eval/exec with content
|
|
42
|
-
$python_eval_exec or
|
|
43
|
-
|
|
44
|
-
// Python system calls
|
|
45
|
-
$python_system_calls or
|
|
46
|
-
|
|
47
|
-
// Python import abuse
|
|
48
|
-
$python_import_abuse or
|
|
49
|
-
|
|
50
|
-
// Bash shell execution
|
|
51
|
-
$bash_shell_exec or
|
|
52
|
-
|
|
53
|
-
// Obfuscated execution
|
|
54
|
-
$obfuscated_execution or
|
|
55
|
-
|
|
56
|
-
// Shell injection
|
|
57
|
-
$shell_injection or
|
|
58
|
-
|
|
59
|
-
// Unsafe deserialization
|
|
60
|
-
$unsafe_deserialize
|
|
61
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
//////////////////////////////////////////
|
|
2
|
-
// Shell/System Command Injection Detection Rule
|
|
3
|
-
// Target: Command injection patterns for Claude Skills (Python/Bash)
|
|
4
|
-
// (Shell operators, dangerous commands, network tools + reverse shells)
|
|
5
|
-
/////////////////////////////////////////
|
|
6
|
-
|
|
7
|
-
rule command_injection{
|
|
8
|
-
|
|
9
|
-
meta:
|
|
10
|
-
author = "Cisco"
|
|
11
|
-
description = "Detects command injection patterns in Claude Skills: shell operators, system commands, and network tools"
|
|
12
|
-
classification = "harmful"
|
|
13
|
-
threat_type = "INJECTION ATTACK"
|
|
14
|
-
|
|
15
|
-
strings:
|
|
16
|
-
|
|
17
|
-
// Dangerous system commands
|
|
18
|
-
$dangerous_system_cmds = /\b(shutdown|reboot|halt|poweroff)\s+(-[fh]|now|0)\b/
|
|
19
|
-
|
|
20
|
-
// Network tools with suspicious usage (reverse connections, port scanning)
|
|
21
|
-
$malicious_network_tools = /\b(nc|netcat)\s+(-[le]|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/i
|
|
22
|
-
|
|
23
|
-
// Reconnaissance tools
|
|
24
|
-
$reconnaissance_tools = /\b(nmap)\s+(-[sS]|--script|25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/i
|
|
25
|
-
|
|
26
|
-
// Data exfiltration with curl/wget to external URLs
|
|
27
|
-
$data_exfiltration_tools = /\b(wget|curl)\s+(http[s]?:\/\/[^\s]+|ftp:\/\/[^\s]+|-[oO]\s|--output\s)/i
|
|
28
|
-
|
|
29
|
-
// Reverse shell patterns (high severity)
|
|
30
|
-
$reverse_shells = /\b(bash\s+-i|sh\s+-i|nc\s+-e|\/dev\/tcp\/[0-9]+\.|socat.*exec|python.*socket.*connect)\b/i
|
|
31
|
-
|
|
32
|
-
// Shell command chaining with suspicious patterns
|
|
33
|
-
$shell_chaining = /[|&;]\s*(rm\s+-rf|dd\s+if=|chmod\s+777|wget\s+http|curl\s+http)/
|
|
34
|
-
|
|
35
|
-
condition:
|
|
36
|
-
|
|
37
|
-
// Dangerous system command patterns
|
|
38
|
-
$dangerous_system_cmds or
|
|
39
|
-
|
|
40
|
-
// Network tool abuse patterns
|
|
41
|
-
$malicious_network_tools or
|
|
42
|
-
|
|
43
|
-
// Reconnaissance tools
|
|
44
|
-
$reconnaissance_tools or
|
|
45
|
-
|
|
46
|
-
// Data exfiltration tools
|
|
47
|
-
$data_exfiltration_tools or
|
|
48
|
-
|
|
49
|
-
// Reverse shell patterns
|
|
50
|
-
$reverse_shells or
|
|
51
|
-
|
|
52
|
-
// Shell command chaining
|
|
53
|
-
$shell_chaining
|
|
54
|
-
}
|