erosolar-cli 1.7.332 → 1.7.334
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.
- package/README.md +148 -24
- package/dist/alpha-zero/agentWrapper.d.ts +84 -0
- package/dist/alpha-zero/agentWrapper.d.ts.map +1 -0
- package/dist/alpha-zero/agentWrapper.js +171 -0
- package/dist/alpha-zero/agentWrapper.js.map +1 -0
- package/dist/alpha-zero/codeEvaluator.d.ts +25 -0
- package/dist/alpha-zero/codeEvaluator.d.ts.map +1 -0
- package/dist/alpha-zero/codeEvaluator.js +273 -0
- package/dist/alpha-zero/codeEvaluator.js.map +1 -0
- package/dist/alpha-zero/competitiveRunner.d.ts +66 -0
- package/dist/alpha-zero/competitiveRunner.d.ts.map +1 -0
- package/dist/alpha-zero/competitiveRunner.js +224 -0
- package/dist/alpha-zero/competitiveRunner.js.map +1 -0
- package/dist/alpha-zero/index.d.ts +67 -0
- package/dist/alpha-zero/index.d.ts.map +1 -0
- package/dist/alpha-zero/index.js +99 -0
- package/dist/alpha-zero/index.js.map +1 -0
- package/dist/alpha-zero/introspection.d.ts +128 -0
- package/dist/alpha-zero/introspection.d.ts.map +1 -0
- package/dist/alpha-zero/introspection.js +300 -0
- package/dist/alpha-zero/introspection.js.map +1 -0
- package/dist/alpha-zero/metricsTracker.d.ts +71 -0
- package/dist/alpha-zero/metricsTracker.d.ts.map +1 -0
- package/dist/{core → alpha-zero}/metricsTracker.js +5 -2
- package/dist/alpha-zero/metricsTracker.js.map +1 -0
- package/dist/alpha-zero/security/core.d.ts +125 -0
- package/dist/alpha-zero/security/core.d.ts.map +1 -0
- package/dist/alpha-zero/security/core.js +271 -0
- package/dist/alpha-zero/security/core.js.map +1 -0
- package/dist/alpha-zero/security/google.d.ts +125 -0
- package/dist/alpha-zero/security/google.d.ts.map +1 -0
- package/dist/alpha-zero/security/google.js +311 -0
- package/dist/alpha-zero/security/google.js.map +1 -0
- package/dist/alpha-zero/security/googleLoader.d.ts +17 -0
- package/dist/alpha-zero/security/googleLoader.d.ts.map +1 -0
- package/dist/alpha-zero/security/googleLoader.js +41 -0
- package/dist/alpha-zero/security/googleLoader.js.map +1 -0
- package/dist/alpha-zero/security/index.d.ts +29 -0
- package/dist/alpha-zero/security/index.d.ts.map +1 -0
- package/dist/alpha-zero/security/index.js +32 -0
- package/dist/alpha-zero/security/index.js.map +1 -0
- package/dist/alpha-zero/security/simulation.d.ts +124 -0
- package/dist/alpha-zero/security/simulation.d.ts.map +1 -0
- package/dist/alpha-zero/security/simulation.js +277 -0
- package/dist/alpha-zero/security/simulation.js.map +1 -0
- package/dist/alpha-zero/selfModification.d.ts +109 -0
- package/dist/alpha-zero/selfModification.d.ts.map +1 -0
- package/dist/alpha-zero/selfModification.js +233 -0
- package/dist/alpha-zero/selfModification.js.map +1 -0
- package/dist/alpha-zero/types.d.ts +170 -0
- package/dist/alpha-zero/types.d.ts.map +1 -0
- package/dist/alpha-zero/types.js +31 -0
- package/dist/alpha-zero/types.js.map +1 -0
- package/dist/bin/erosolar.js +21 -5
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
- package/dist/capabilities/agentSpawningCapability.js +31 -56
- package/dist/capabilities/agentSpawningCapability.js.map +1 -1
- package/dist/capabilities/securityTestingCapability.d.ts +13 -0
- package/dist/capabilities/securityTestingCapability.d.ts.map +1 -0
- package/dist/capabilities/securityTestingCapability.js +25 -0
- package/dist/capabilities/securityTestingCapability.js.map +1 -0
- package/dist/contracts/agent-schemas.json +15 -0
- package/dist/contracts/tools.schema.json +9 -0
- package/dist/core/agent.d.ts +2 -2
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js.map +1 -1
- package/dist/core/aiFlowOptimizer.d.ts +26 -0
- package/dist/core/aiFlowOptimizer.d.ts.map +1 -0
- package/dist/core/aiFlowOptimizer.js +31 -0
- package/dist/core/aiFlowOptimizer.js.map +1 -0
- package/dist/core/aiOptimizationEngine.d.ts +158 -0
- package/dist/core/aiOptimizationEngine.d.ts.map +1 -0
- package/dist/core/aiOptimizationEngine.js +428 -0
- package/dist/core/aiOptimizationEngine.js.map +1 -0
- package/dist/core/aiOptimizationIntegration.d.ts +93 -0
- package/dist/core/aiOptimizationIntegration.d.ts.map +1 -0
- package/dist/core/aiOptimizationIntegration.js +250 -0
- package/dist/core/aiOptimizationIntegration.js.map +1 -0
- package/dist/core/customCommands.d.ts +0 -1
- package/dist/core/customCommands.d.ts.map +1 -1
- package/dist/core/customCommands.js +0 -3
- package/dist/core/customCommands.js.map +1 -1
- package/dist/core/enhancedErrorRecovery.d.ts +100 -0
- package/dist/core/enhancedErrorRecovery.d.ts.map +1 -0
- package/dist/core/enhancedErrorRecovery.js +345 -0
- package/dist/core/enhancedErrorRecovery.js.map +1 -0
- package/dist/core/hooksSystem.d.ts +65 -0
- package/dist/core/hooksSystem.d.ts.map +1 -0
- package/dist/core/hooksSystem.js +273 -0
- package/dist/core/hooksSystem.js.map +1 -0
- package/dist/core/memorySystem.d.ts +48 -0
- package/dist/core/memorySystem.d.ts.map +1 -0
- package/dist/core/memorySystem.js +271 -0
- package/dist/core/memorySystem.js.map +1 -0
- package/dist/core/toolPreconditions.d.ts.map +1 -1
- package/dist/core/toolPreconditions.js +14 -0
- package/dist/core/toolPreconditions.js.map +1 -1
- package/dist/core/toolRuntime.d.ts +1 -22
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +5 -0
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/core/toolValidation.d.ts.map +1 -1
- package/dist/core/toolValidation.js +3 -14
- package/dist/core/toolValidation.js.map +1 -1
- package/dist/core/unified/errors.d.ts +189 -0
- package/dist/core/unified/errors.d.ts.map +1 -0
- package/dist/core/unified/errors.js +497 -0
- package/dist/core/unified/errors.js.map +1 -0
- package/dist/core/unified/index.d.ts +19 -0
- package/dist/core/unified/index.d.ts.map +1 -0
- package/dist/core/unified/index.js +68 -0
- package/dist/core/unified/index.js.map +1 -0
- package/dist/core/unified/schema.d.ts +101 -0
- package/dist/core/unified/schema.d.ts.map +1 -0
- package/dist/core/unified/schema.js +350 -0
- package/dist/core/unified/schema.js.map +1 -0
- package/dist/core/unified/toolRuntime.d.ts +179 -0
- package/dist/core/unified/toolRuntime.d.ts.map +1 -0
- package/dist/core/unified/toolRuntime.js +517 -0
- package/dist/core/unified/toolRuntime.js.map +1 -0
- package/dist/core/unified/tools.d.ts +127 -0
- package/dist/core/unified/tools.d.ts.map +1 -0
- package/dist/core/unified/tools.js +1333 -0
- package/dist/core/unified/tools.js.map +1 -0
- package/dist/core/unified/types.d.ts +352 -0
- package/dist/core/unified/types.d.ts.map +1 -0
- package/dist/core/unified/types.js +12 -0
- package/dist/core/unified/types.js.map +1 -0
- package/dist/core/unified/version.d.ts +209 -0
- package/dist/core/unified/version.d.ts.map +1 -0
- package/dist/core/unified/version.js +454 -0
- package/dist/core/unified/version.js.map +1 -0
- package/dist/core/validationRunner.d.ts +3 -1
- package/dist/core/validationRunner.d.ts.map +1 -1
- package/dist/core/validationRunner.js.map +1 -1
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +0 -21
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +18 -9
- package/dist/mcp/sseClient.js.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.d.ts +6 -0
- package/dist/plugins/tools/build/buildPlugin.d.ts.map +1 -1
- package/dist/plugins/tools/build/buildPlugin.js +10 -4
- package/dist/plugins/tools/build/buildPlugin.js.map +1 -1
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +2 -0
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/plugins/tools/security/securityPlugin.d.ts +3 -0
- package/dist/plugins/tools/security/securityPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/security/securityPlugin.js +12 -0
- package/dist/plugins/tools/security/securityPlugin.js.map +1 -0
- package/dist/runtime/agentSession.d.ts +2 -2
- package/dist/runtime/agentSession.d.ts.map +1 -1
- package/dist/runtime/agentSession.js +2 -2
- package/dist/runtime/agentSession.js.map +1 -1
- package/dist/security/active-stack-security.d.ts +112 -0
- package/dist/security/active-stack-security.d.ts.map +1 -0
- package/dist/security/active-stack-security.js +296 -0
- package/dist/security/active-stack-security.js.map +1 -0
- package/dist/security/advanced-persistence-research.d.ts +92 -0
- package/dist/security/advanced-persistence-research.d.ts.map +1 -0
- package/dist/security/advanced-persistence-research.js +195 -0
- package/dist/security/advanced-persistence-research.js.map +1 -0
- package/dist/security/advanced-targeting.d.ts +119 -0
- package/dist/security/advanced-targeting.d.ts.map +1 -0
- package/dist/security/advanced-targeting.js +233 -0
- package/dist/security/advanced-targeting.js.map +1 -0
- package/dist/security/assessment/vulnerabilityAssessment.d.ts +104 -0
- package/dist/security/assessment/vulnerabilityAssessment.d.ts.map +1 -0
- package/dist/security/assessment/vulnerabilityAssessment.js +315 -0
- package/dist/security/assessment/vulnerabilityAssessment.js.map +1 -0
- package/dist/security/authorization/securityAuthorization.d.ts +88 -0
- package/dist/security/authorization/securityAuthorization.d.ts.map +1 -0
- package/dist/security/authorization/securityAuthorization.js +172 -0
- package/dist/security/authorization/securityAuthorization.js.map +1 -0
- package/dist/security/comprehensive-targeting.d.ts +85 -0
- package/dist/security/comprehensive-targeting.d.ts.map +1 -0
- package/dist/security/comprehensive-targeting.js +438 -0
- package/dist/security/comprehensive-targeting.js.map +1 -0
- package/dist/security/global-security-integration.d.ts +91 -0
- package/dist/security/global-security-integration.d.ts.map +1 -0
- package/dist/security/global-security-integration.js +218 -0
- package/dist/security/global-security-integration.js.map +1 -0
- package/dist/security/index.d.ts +38 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +47 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/persistence-analyzer.d.ts +56 -0
- package/dist/security/persistence-analyzer.d.ts.map +1 -0
- package/dist/security/persistence-analyzer.js +187 -0
- package/dist/security/persistence-analyzer.js.map +1 -0
- package/dist/security/persistence-cli.d.ts +36 -0
- package/dist/security/persistence-cli.d.ts.map +1 -0
- package/dist/security/persistence-cli.js +160 -0
- package/dist/security/persistence-cli.js.map +1 -0
- package/dist/security/persistence-research.d.ts +92 -0
- package/dist/security/persistence-research.d.ts.map +1 -0
- package/dist/security/persistence-research.js +364 -0
- package/dist/security/persistence-research.js.map +1 -0
- package/dist/security/research/persistenceResearch.d.ts +97 -0
- package/dist/security/research/persistenceResearch.d.ts.map +1 -0
- package/dist/security/research/persistenceResearch.js +282 -0
- package/dist/security/research/persistenceResearch.js.map +1 -0
- package/dist/security/security-integration.d.ts +74 -0
- package/dist/security/security-integration.d.ts.map +1 -0
- package/dist/security/security-integration.js +137 -0
- package/dist/security/security-integration.js.map +1 -0
- package/dist/security/security-testing-framework.d.ts +112 -0
- package/dist/security/security-testing-framework.d.ts.map +1 -0
- package/dist/security/security-testing-framework.js +364 -0
- package/dist/security/security-testing-framework.js.map +1 -0
- package/dist/security/simulation/attackSimulation.d.ts +93 -0
- package/dist/security/simulation/attackSimulation.d.ts.map +1 -0
- package/dist/security/simulation/attackSimulation.js +341 -0
- package/dist/security/simulation/attackSimulation.js.map +1 -0
- package/dist/security/strategic-operations.d.ts +100 -0
- package/dist/security/strategic-operations.d.ts.map +1 -0
- package/dist/security/strategic-operations.js +276 -0
- package/dist/security/strategic-operations.js.map +1 -0
- package/dist/security/tool-security-wrapper.d.ts +58 -0
- package/dist/security/tool-security-wrapper.d.ts.map +1 -0
- package/dist/security/tool-security-wrapper.js +156 -0
- package/dist/security/tool-security-wrapper.js.map +1 -0
- package/dist/shell/claudeCodeStreamHandler.d.ts +145 -0
- package/dist/shell/claudeCodeStreamHandler.d.ts.map +1 -0
- package/dist/shell/claudeCodeStreamHandler.js +322 -0
- package/dist/shell/claudeCodeStreamHandler.js.map +1 -0
- package/dist/shell/inputQueueManager.d.ts +144 -0
- package/dist/shell/inputQueueManager.d.ts.map +1 -0
- package/dist/shell/inputQueueManager.js +290 -0
- package/dist/shell/inputQueueManager.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +7 -16
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +166 -235
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/metricsTracker.d.ts +60 -0
- package/dist/shell/metricsTracker.d.ts.map +1 -0
- package/dist/shell/metricsTracker.js +119 -0
- package/dist/shell/metricsTracker.js.map +1 -0
- package/dist/shell/shellApp.d.ts +0 -2
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +9 -40
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/streamingOutputManager.d.ts +115 -0
- package/dist/shell/streamingOutputManager.d.ts.map +1 -0
- package/dist/shell/streamingOutputManager.js +225 -0
- package/dist/shell/streamingOutputManager.js.map +1 -0
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +4 -1
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/shell/terminalInput.d.ts +118 -149
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +533 -677
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +21 -79
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +30 -99
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/subagents/taskRunner.d.ts +1 -7
- package/dist/subagents/taskRunner.d.ts.map +1 -1
- package/dist/subagents/taskRunner.js +47 -180
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/tools/securityTools.d.ts +22 -0
- package/dist/tools/securityTools.d.ts.map +1 -0
- package/dist/tools/securityTools.js +448 -0
- package/dist/tools/securityTools.js.map +1 -0
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +12 -13
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/display.d.ts +45 -24
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +259 -140
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/persistentPrompt.d.ts +50 -0
- package/dist/ui/persistentPrompt.d.ts.map +1 -0
- package/dist/ui/persistentPrompt.js +92 -0
- package/dist/ui/persistentPrompt.js.map +1 -0
- package/dist/ui/terminalUISchema.d.ts +195 -0
- package/dist/ui/terminalUISchema.d.ts.map +1 -0
- package/dist/ui/terminalUISchema.js +113 -0
- package/dist/ui/terminalUISchema.js.map +1 -0
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +8 -6
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/toolDisplay.d.ts +158 -0
- package/dist/ui/toolDisplay.d.ts.map +1 -1
- package/dist/ui/toolDisplay.js +348 -0
- package/dist/ui/toolDisplay.js.map +1 -1
- package/dist/ui/unified/layout.d.ts +0 -1
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +25 -15
- package/dist/ui/unified/layout.js.map +1 -1
- package/package.json +4 -4
- package/scripts/deploy-security-capabilities.js +178 -0
- package/dist/core/hooks.d.ts +0 -113
- package/dist/core/hooks.d.ts.map +0 -1
- package/dist/core/hooks.js +0 -267
- package/dist/core/hooks.js.map +0 -1
- package/dist/core/metricsTracker.d.ts +0 -122
- package/dist/core/metricsTracker.d.ts.map +0 -1
- package/dist/core/metricsTracker.js.map +0 -1
- package/dist/core/securityAssessment.d.ts +0 -91
- package/dist/core/securityAssessment.d.ts.map +0 -1
- package/dist/core/securityAssessment.js +0 -580
- package/dist/core/securityAssessment.js.map +0 -1
- package/dist/core/verification.d.ts +0 -137
- package/dist/core/verification.d.ts.map +0 -1
- package/dist/core/verification.js +0 -323
- package/dist/core/verification.js.map +0 -1
- package/dist/subagents/agentConfig.d.ts +0 -27
- package/dist/subagents/agentConfig.d.ts.map +0 -1
- package/dist/subagents/agentConfig.js +0 -89
- package/dist/subagents/agentConfig.js.map +0 -1
- package/dist/subagents/agentRegistry.d.ts +0 -33
- package/dist/subagents/agentRegistry.d.ts.map +0 -1
- package/dist/subagents/agentRegistry.js +0 -162
- package/dist/subagents/agentRegistry.js.map +0 -1
- package/dist/utils/frontmatter.d.ts +0 -10
- package/dist/utils/frontmatter.d.ts.map +0 -1
- package/dist/utils/frontmatter.js +0 -78
- package/dist/utils/frontmatter.js.map +0 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Persistence Research CLI
|
|
4
|
+
*
|
|
5
|
+
* Command-line interface for security research on persistence mechanisms
|
|
6
|
+
* across Windows, Linux, and cross-platform environments.
|
|
7
|
+
*/
|
|
8
|
+
import { PersistenceAnalyzer } from './persistence-analyzer.js';
|
|
9
|
+
class PersistenceCLI {
|
|
10
|
+
analyzer;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.analyzer = new PersistenceAnalyzer();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parse command line arguments
|
|
16
|
+
*/
|
|
17
|
+
parseArguments(args) {
|
|
18
|
+
const parsed = {};
|
|
19
|
+
for (let i = 0; i < args.length; i++) {
|
|
20
|
+
const arg = args[i];
|
|
21
|
+
switch (arg) {
|
|
22
|
+
case '--platform':
|
|
23
|
+
case '-p':
|
|
24
|
+
parsed.platform = args[++i];
|
|
25
|
+
break;
|
|
26
|
+
case '--output':
|
|
27
|
+
case '-o':
|
|
28
|
+
parsed.output = args[++i];
|
|
29
|
+
break;
|
|
30
|
+
case '--include-remediation':
|
|
31
|
+
case '-r':
|
|
32
|
+
parsed.includeRemediation = true;
|
|
33
|
+
break;
|
|
34
|
+
case '--risk-threshold':
|
|
35
|
+
case '-t':
|
|
36
|
+
parsed.riskThreshold = args[++i];
|
|
37
|
+
break;
|
|
38
|
+
case '--generate-rules':
|
|
39
|
+
case '-g':
|
|
40
|
+
const rules = args[++i]?.split(',');
|
|
41
|
+
if (rules) {
|
|
42
|
+
parsed.generateRules = rules;
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case '--test-cases':
|
|
46
|
+
parsed.testCases = true;
|
|
47
|
+
break;
|
|
48
|
+
case '--simulate-detection':
|
|
49
|
+
parsed.simulateDetection = true;
|
|
50
|
+
break;
|
|
51
|
+
case '--assessment':
|
|
52
|
+
parsed.assessment = true;
|
|
53
|
+
break;
|
|
54
|
+
case '--help':
|
|
55
|
+
case '-h':
|
|
56
|
+
parsed.help = true;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return parsed;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Display help information
|
|
64
|
+
*/
|
|
65
|
+
showHelp() {
|
|
66
|
+
console.log(`
|
|
67
|
+
Persistence Research CLI
|
|
68
|
+
|
|
69
|
+
Usage:
|
|
70
|
+
node persistence-cli.js [options]
|
|
71
|
+
|
|
72
|
+
Options:
|
|
73
|
+
--platform, -p <platform> Target platform (windows, linux, cross-platform)
|
|
74
|
+
--output, -o <format> Output format (text, json, csv) [default: text]
|
|
75
|
+
--include-remediation, -r Include remediation steps in output
|
|
76
|
+
--risk-threshold, -t <level> Filter by risk level (low, medium, high, critical) [default: medium]
|
|
77
|
+
--generate-rules, -g <ids> Generate detection rules for specific techniques (comma-separated)
|
|
78
|
+
--test-cases Generate test cases for security validation
|
|
79
|
+
--simulate-detection Simulate detection of persistence techniques
|
|
80
|
+
--assessment Generate comprehensive security assessment report
|
|
81
|
+
--help, -h Show this help message
|
|
82
|
+
|
|
83
|
+
Examples:
|
|
84
|
+
# Analyze Windows persistence techniques
|
|
85
|
+
node persistence-cli.js --platform windows
|
|
86
|
+
|
|
87
|
+
# Generate JSON output with remediation steps
|
|
88
|
+
node persistence-cli.js --platform linux --output json --include-remediation
|
|
89
|
+
|
|
90
|
+
# Generate detection rules for specific techniques
|
|
91
|
+
node persistence-cli.js --generate-rules win-registry-run,linux-cron
|
|
92
|
+
|
|
93
|
+
# Generate security assessment report
|
|
94
|
+
node persistence-cli.js --platform windows --assessment
|
|
95
|
+
|
|
96
|
+
# Generate test cases for Linux
|
|
97
|
+
node persistence-cli.js --platform linux --test-cases
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Execute the CLI with provided arguments
|
|
102
|
+
*/
|
|
103
|
+
async execute(args) {
|
|
104
|
+
const parsedArgs = this.parseArguments(args);
|
|
105
|
+
if (parsedArgs.help || args.length === 0) {
|
|
106
|
+
this.showHelp();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
if (parsedArgs.generateRules) {
|
|
111
|
+
const rules = this.analyzer.generateDetectionRules(parsedArgs.generateRules);
|
|
112
|
+
console.log(rules);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (parsedArgs.testCases && parsedArgs.platform) {
|
|
116
|
+
const testCases = this.analyzer.generateTestCases(parsedArgs.platform);
|
|
117
|
+
console.log(testCases);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (parsedArgs.simulateDetection && parsedArgs.platform) {
|
|
121
|
+
const detected = this.analyzer.simulateDetection(parsedArgs.platform);
|
|
122
|
+
console.log('Simulated Detection Results:');
|
|
123
|
+
console.log(JSON.stringify(detected, null, 2));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (parsedArgs.assessment && parsedArgs.platform) {
|
|
127
|
+
const report = this.analyzer.generateAssessmentReport(parsedArgs.platform);
|
|
128
|
+
console.log(report);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (parsedArgs.platform) {
|
|
132
|
+
const options = {
|
|
133
|
+
platform: parsedArgs.platform,
|
|
134
|
+
outputFormat: parsedArgs.output || 'text',
|
|
135
|
+
includeRemediation: parsedArgs.includeRemediation || false,
|
|
136
|
+
riskThreshold: parsedArgs.riskThreshold || 'medium'
|
|
137
|
+
};
|
|
138
|
+
const analysis = this.analyzer.analyzePlatform(options);
|
|
139
|
+
console.log(analysis);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
console.error('Error: Platform argument required for analysis');
|
|
143
|
+
this.showHelp();
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error('Error executing persistence analysis:', error);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// CLI entry point
|
|
152
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
153
|
+
const cli = new PersistenceCLI();
|
|
154
|
+
cli.execute(process.argv.slice(2)).catch(error => {
|
|
155
|
+
console.error('Fatal error:', error);
|
|
156
|
+
process.exit(1);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
export { PersistenceCLI };
|
|
160
|
+
//# sourceMappingURL=persistence-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-cli.js","sourceRoot":"","sources":["../../src/security/persistence-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Research Toolkit
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive analysis of persistence mechanisms across operating systems
|
|
5
|
+
* for legitimate security research and testing purposes.
|
|
6
|
+
*
|
|
7
|
+
* This module provides tools for:
|
|
8
|
+
* - Analyzing Windows persistence techniques
|
|
9
|
+
* - Analyzing Linux persistence techniques
|
|
10
|
+
* - Detecting persistence mechanisms
|
|
11
|
+
* - Generating test cases for security validation
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
* @author Bo Shang
|
|
15
|
+
*/
|
|
16
|
+
export interface PersistenceTechnique {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
platform: 'windows' | 'linux' | 'macos' | 'cross-platform';
|
|
20
|
+
mitreId?: string;
|
|
21
|
+
description: string;
|
|
22
|
+
detectionMethods: string[];
|
|
23
|
+
remediationSteps: string[];
|
|
24
|
+
riskLevel: 'low' | 'medium' | 'high' | 'critical';
|
|
25
|
+
}
|
|
26
|
+
export interface PersistenceAnalysis {
|
|
27
|
+
systemInfo: SystemInfo;
|
|
28
|
+
detectedTechniques: DetectedTechnique[];
|
|
29
|
+
recommendations: string[];
|
|
30
|
+
riskScore: number;
|
|
31
|
+
}
|
|
32
|
+
export interface SystemInfo {
|
|
33
|
+
platform: string;
|
|
34
|
+
architecture: string;
|
|
35
|
+
version: string;
|
|
36
|
+
user: string;
|
|
37
|
+
privileges: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface DetectedTechnique {
|
|
40
|
+
technique: PersistenceTechnique;
|
|
41
|
+
evidence: string;
|
|
42
|
+
confidence: 'low' | 'medium' | 'high';
|
|
43
|
+
location: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Windows Persistence Techniques Database
|
|
47
|
+
*/
|
|
48
|
+
export declare const WINDOWS_PERSISTENCE_TECHNIQUES: PersistenceTechnique[];
|
|
49
|
+
/**
|
|
50
|
+
* Linux Persistence Techniques Database
|
|
51
|
+
*/
|
|
52
|
+
export declare const LINUX_PERSISTENCE_TECHNIQUES: PersistenceTechnique[];
|
|
53
|
+
/**
|
|
54
|
+
* Cross-platform Persistence Techniques
|
|
55
|
+
*/
|
|
56
|
+
export declare const CROSS_PLATFORM_PERSISTENCE_TECHNIQUES: PersistenceTechnique[];
|
|
57
|
+
/**
|
|
58
|
+
* Persistence Research Toolkit Class
|
|
59
|
+
*/
|
|
60
|
+
export declare class PersistenceResearchToolkit {
|
|
61
|
+
private allTechniques;
|
|
62
|
+
constructor();
|
|
63
|
+
/**
|
|
64
|
+
* Get all persistence techniques for a specific platform
|
|
65
|
+
*/
|
|
66
|
+
getTechniquesByPlatform(platform: string): PersistenceTechnique[];
|
|
67
|
+
/**
|
|
68
|
+
* Search techniques by MITRE ATT&CK ID
|
|
69
|
+
*/
|
|
70
|
+
getTechniquesByMitreId(mitreId: string): PersistenceTechnique[];
|
|
71
|
+
/**
|
|
72
|
+
* Generate detection rules for a specific technique
|
|
73
|
+
*/
|
|
74
|
+
generateDetectionRules(techniqueId: string): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Generate Windows-specific detection rules
|
|
77
|
+
*/
|
|
78
|
+
private generateWindowsDetectionRules;
|
|
79
|
+
/**
|
|
80
|
+
* Generate Linux-specific detection rules
|
|
81
|
+
*/
|
|
82
|
+
private generateLinuxDetectionRules;
|
|
83
|
+
/**
|
|
84
|
+
* Generate test cases for security validation
|
|
85
|
+
*/
|
|
86
|
+
generateTestCases(platform: string): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Get remediation guidance for detected techniques
|
|
89
|
+
*/
|
|
90
|
+
getRemediationGuidance(detectedTechniques: DetectedTechnique[]): string[];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=persistence-research.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-research.d.ts","sourceRoot":"","sources":["../../src/security/persistence-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,gBAAgB,CAAC;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CACnD;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,EA2FhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,oBAAoB,EA2F9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qCAAqC,EAAE,oBAAoB,EAmCvE,CAAC;AAEF;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,aAAa,CAAyB;;IAU9C;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAMjE;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE;IAI/D;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;IAuBrD;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAmCrC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAmCnC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAe7C;;OAEG;IACH,sBAAsB,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE;CAgB1E"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Research Toolkit
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive analysis of persistence mechanisms across operating systems
|
|
5
|
+
* for legitimate security research and testing purposes.
|
|
6
|
+
*
|
|
7
|
+
* This module provides tools for:
|
|
8
|
+
* - Analyzing Windows persistence techniques
|
|
9
|
+
* - Analyzing Linux persistence techniques
|
|
10
|
+
* - Detecting persistence mechanisms
|
|
11
|
+
* - Generating test cases for security validation
|
|
12
|
+
*
|
|
13
|
+
* @license MIT
|
|
14
|
+
* @author Bo Shang
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Windows Persistence Techniques Database
|
|
18
|
+
*/
|
|
19
|
+
export const WINDOWS_PERSISTENCE_TECHNIQUES = [
|
|
20
|
+
{
|
|
21
|
+
id: 'win-registry-run',
|
|
22
|
+
name: 'Registry Run Keys',
|
|
23
|
+
platform: 'windows',
|
|
24
|
+
mitreId: 'T1547.001',
|
|
25
|
+
description: 'Malware adds entries to registry run keys to execute on system startup',
|
|
26
|
+
detectionMethods: [
|
|
27
|
+
'Monitor registry changes in HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run',
|
|
28
|
+
'Monitor registry changes in HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run',
|
|
29
|
+
'Check for suspicious executable paths in run keys'
|
|
30
|
+
],
|
|
31
|
+
remediationSteps: [
|
|
32
|
+
'Remove suspicious entries from registry run keys',
|
|
33
|
+
'Scan for associated malware',
|
|
34
|
+
'Monitor for registry modifications'
|
|
35
|
+
],
|
|
36
|
+
riskLevel: 'high'
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'win-scheduled-tasks',
|
|
40
|
+
name: 'Scheduled Tasks',
|
|
41
|
+
platform: 'windows',
|
|
42
|
+
mitreId: 'T1053.005',
|
|
43
|
+
description: 'Creates scheduled tasks to execute malicious code at specific times or events',
|
|
44
|
+
detectionMethods: [
|
|
45
|
+
'Review scheduled tasks using schtasks command',
|
|
46
|
+
'Monitor Task Scheduler service events',
|
|
47
|
+
'Check for tasks with suspicious actions or triggers'
|
|
48
|
+
],
|
|
49
|
+
remediationSteps: [
|
|
50
|
+
'Delete malicious scheduled tasks',
|
|
51
|
+
'Monitor Task Scheduler service',
|
|
52
|
+
'Implement application whitelisting'
|
|
53
|
+
],
|
|
54
|
+
riskLevel: 'high'
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'win-services',
|
|
58
|
+
name: 'Windows Services',
|
|
59
|
+
platform: 'windows',
|
|
60
|
+
mitreId: 'T1543.003',
|
|
61
|
+
description: 'Creates or modifies Windows services to run malicious code',
|
|
62
|
+
detectionMethods: [
|
|
63
|
+
'Review services using sc query or Get-Service',
|
|
64
|
+
'Monitor service creation/modification events',
|
|
65
|
+
'Check for services with suspicious image paths'
|
|
66
|
+
],
|
|
67
|
+
remediationSteps: [
|
|
68
|
+
'Stop and remove malicious services',
|
|
69
|
+
'Monitor service creation events',
|
|
70
|
+
'Implement service execution policies'
|
|
71
|
+
],
|
|
72
|
+
riskLevel: 'critical'
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'win-dll-hijacking',
|
|
76
|
+
name: 'DLL Hijacking',
|
|
77
|
+
platform: 'windows',
|
|
78
|
+
mitreId: 'T1574.001',
|
|
79
|
+
description: 'Places malicious DLLs in application search paths to hijack legitimate processes',
|
|
80
|
+
detectionMethods: [
|
|
81
|
+
'Monitor DLL loading from unusual locations',
|
|
82
|
+
'Check for DLLs in application directories with weak permissions',
|
|
83
|
+
'Use process monitoring tools'
|
|
84
|
+
],
|
|
85
|
+
remediationSteps: [
|
|
86
|
+
'Remove malicious DLLs',
|
|
87
|
+
'Secure application directories',
|
|
88
|
+
'Implement DLL search order hardening'
|
|
89
|
+
],
|
|
90
|
+
riskLevel: 'medium'
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'win-wmi',
|
|
94
|
+
name: 'WMI Event Subscription',
|
|
95
|
+
platform: 'windows',
|
|
96
|
+
mitreId: 'T1546.003',
|
|
97
|
+
description: 'Uses WMI event subscriptions to trigger malicious code execution',
|
|
98
|
+
detectionMethods: [
|
|
99
|
+
'Query WMI event subscriptions',
|
|
100
|
+
'Monitor WMI event consumer creation',
|
|
101
|
+
'Check for suspicious WMI filters and consumers'
|
|
102
|
+
],
|
|
103
|
+
remediationSteps: [
|
|
104
|
+
'Remove malicious WMI event subscriptions',
|
|
105
|
+
'Monitor WMI activity',
|
|
106
|
+
'Restrict WMI permissions'
|
|
107
|
+
],
|
|
108
|
+
riskLevel: 'high'
|
|
109
|
+
}
|
|
110
|
+
];
|
|
111
|
+
/**
|
|
112
|
+
* Linux Persistence Techniques Database
|
|
113
|
+
*/
|
|
114
|
+
export const LINUX_PERSISTENCE_TECHNIQUES = [
|
|
115
|
+
{
|
|
116
|
+
id: 'linux-cron',
|
|
117
|
+
name: 'Cron Jobs',
|
|
118
|
+
platform: 'linux',
|
|
119
|
+
mitreId: 'T1053.003',
|
|
120
|
+
description: 'Adds malicious cron jobs to execute at scheduled intervals',
|
|
121
|
+
detectionMethods: [
|
|
122
|
+
'Review crontab files for all users',
|
|
123
|
+
'Monitor /etc/cron.* directories',
|
|
124
|
+
'Check for cron jobs with suspicious commands'
|
|
125
|
+
],
|
|
126
|
+
remediationSteps: [
|
|
127
|
+
'Remove malicious cron entries',
|
|
128
|
+
'Monitor cron job creation',
|
|
129
|
+
'Implement cron access controls'
|
|
130
|
+
],
|
|
131
|
+
riskLevel: 'high'
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'linux-systemd',
|
|
135
|
+
name: 'Systemd Services',
|
|
136
|
+
platform: 'linux',
|
|
137
|
+
mitreId: 'T1543.002',
|
|
138
|
+
description: 'Creates or modifies systemd services for persistence',
|
|
139
|
+
detectionMethods: [
|
|
140
|
+
'Review systemd service files in /etc/systemd/system/',
|
|
141
|
+
'Monitor service unit file creation',
|
|
142
|
+
'Check for services with suspicious ExecStart commands'
|
|
143
|
+
],
|
|
144
|
+
remediationSteps: [
|
|
145
|
+
'Stop and remove malicious services',
|
|
146
|
+
'Monitor systemd service creation',
|
|
147
|
+
'Implement service validation'
|
|
148
|
+
],
|
|
149
|
+
riskLevel: 'critical'
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: 'linux-ssh-keys',
|
|
153
|
+
name: 'SSH Authorized Keys',
|
|
154
|
+
platform: 'linux',
|
|
155
|
+
mitreId: 'T1098.004',
|
|
156
|
+
description: 'Adds backdoor SSH keys to authorized_keys files',
|
|
157
|
+
detectionMethods: [
|
|
158
|
+
'Review ~/.ssh/authorized_keys files',
|
|
159
|
+
'Monitor SSH key additions',
|
|
160
|
+
'Check for unknown public keys'
|
|
161
|
+
],
|
|
162
|
+
remediationSteps: [
|
|
163
|
+
'Remove unauthorized SSH keys',
|
|
164
|
+
'Monitor authorized_keys modifications',
|
|
165
|
+
'Implement SSH key management'
|
|
166
|
+
],
|
|
167
|
+
riskLevel: 'high'
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: 'linux-shell-config',
|
|
171
|
+
name: 'Shell Configuration Files',
|
|
172
|
+
platform: 'linux',
|
|
173
|
+
mitreId: 'T1546.004',
|
|
174
|
+
description: 'Modifies shell configuration files (.bashrc, .profile, etc.) to execute malicious code',
|
|
175
|
+
detectionMethods: [
|
|
176
|
+
'Review shell configuration files',
|
|
177
|
+
'Monitor modifications to .bashrc, .profile, etc.',
|
|
178
|
+
'Check for suspicious commands in shell startup files'
|
|
179
|
+
],
|
|
180
|
+
remediationSteps: [
|
|
181
|
+
'Remove malicious shell configurations',
|
|
182
|
+
'Monitor shell configuration changes',
|
|
183
|
+
'Implement file integrity monitoring'
|
|
184
|
+
],
|
|
185
|
+
riskLevel: 'medium'
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: 'linux-ld-so-preload',
|
|
189
|
+
name: 'LD_PRELOAD Hijacking',
|
|
190
|
+
platform: 'linux',
|
|
191
|
+
mitreId: 'T1574.006',
|
|
192
|
+
description: 'Uses LD_PRELOAD environment variable to load malicious libraries',
|
|
193
|
+
detectionMethods: [
|
|
194
|
+
'Check LD_PRELOAD environment variable',
|
|
195
|
+
'Monitor /etc/ld.so.preload file',
|
|
196
|
+
'Review shell environment variables'
|
|
197
|
+
],
|
|
198
|
+
remediationSteps: [
|
|
199
|
+
'Remove malicious LD_PRELOAD settings',
|
|
200
|
+
'Monitor environment variable changes',
|
|
201
|
+
'Implement library validation'
|
|
202
|
+
],
|
|
203
|
+
riskLevel: 'medium'
|
|
204
|
+
}
|
|
205
|
+
];
|
|
206
|
+
/**
|
|
207
|
+
* Cross-platform Persistence Techniques
|
|
208
|
+
*/
|
|
209
|
+
export const CROSS_PLATFORM_PERSISTENCE_TECHNIQUES = [
|
|
210
|
+
{
|
|
211
|
+
id: 'cross-browser-extensions',
|
|
212
|
+
name: 'Browser Extensions',
|
|
213
|
+
platform: 'cross-platform',
|
|
214
|
+
description: 'Installs malicious browser extensions for persistence',
|
|
215
|
+
detectionMethods: [
|
|
216
|
+
'Review installed browser extensions',
|
|
217
|
+
'Monitor extension installation events',
|
|
218
|
+
'Check for suspicious extension permissions'
|
|
219
|
+
],
|
|
220
|
+
remediationSteps: [
|
|
221
|
+
'Remove malicious browser extensions',
|
|
222
|
+
'Monitor extension installations',
|
|
223
|
+
'Implement browser security policies'
|
|
224
|
+
],
|
|
225
|
+
riskLevel: 'medium'
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
id: 'cross-startup-items',
|
|
229
|
+
name: 'Startup Items/Applications',
|
|
230
|
+
platform: 'cross-platform',
|
|
231
|
+
description: 'Adds items to user or system startup locations',
|
|
232
|
+
detectionMethods: [
|
|
233
|
+
'Review startup directories and registry keys',
|
|
234
|
+
'Monitor startup item creation',
|
|
235
|
+
'Check for suspicious startup applications'
|
|
236
|
+
],
|
|
237
|
+
remediationSteps: [
|
|
238
|
+
'Remove malicious startup items',
|
|
239
|
+
'Monitor startup locations',
|
|
240
|
+
'Implement application whitelisting'
|
|
241
|
+
],
|
|
242
|
+
riskLevel: 'high'
|
|
243
|
+
}
|
|
244
|
+
];
|
|
245
|
+
/**
|
|
246
|
+
* Persistence Research Toolkit Class
|
|
247
|
+
*/
|
|
248
|
+
export class PersistenceResearchToolkit {
|
|
249
|
+
allTechniques;
|
|
250
|
+
constructor() {
|
|
251
|
+
this.allTechniques = [
|
|
252
|
+
...WINDOWS_PERSISTENCE_TECHNIQUES,
|
|
253
|
+
...LINUX_PERSISTENCE_TECHNIQUES,
|
|
254
|
+
...CROSS_PLATFORM_PERSISTENCE_TECHNIQUES
|
|
255
|
+
];
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get all persistence techniques for a specific platform
|
|
259
|
+
*/
|
|
260
|
+
getTechniquesByPlatform(platform) {
|
|
261
|
+
return this.allTechniques.filter(tech => tech.platform === platform || tech.platform === 'cross-platform');
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Search techniques by MITRE ATT&CK ID
|
|
265
|
+
*/
|
|
266
|
+
getTechniquesByMitreId(mitreId) {
|
|
267
|
+
return this.allTechniques.filter(tech => tech.mitreId === mitreId);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Generate detection rules for a specific technique
|
|
271
|
+
*/
|
|
272
|
+
generateDetectionRules(techniqueId) {
|
|
273
|
+
const technique = this.allTechniques.find(t => t.id === techniqueId);
|
|
274
|
+
if (!technique) {
|
|
275
|
+
return ['Technique not found'];
|
|
276
|
+
}
|
|
277
|
+
const rules = [];
|
|
278
|
+
// Generate platform-specific detection rules
|
|
279
|
+
switch (technique.platform) {
|
|
280
|
+
case 'windows':
|
|
281
|
+
rules.push(...this.generateWindowsDetectionRules(technique));
|
|
282
|
+
break;
|
|
283
|
+
case 'linux':
|
|
284
|
+
rules.push(...this.generateLinuxDetectionRules(technique));
|
|
285
|
+
break;
|
|
286
|
+
default:
|
|
287
|
+
rules.push(...technique.detectionMethods);
|
|
288
|
+
}
|
|
289
|
+
return rules;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Generate Windows-specific detection rules
|
|
293
|
+
*/
|
|
294
|
+
generateWindowsDetectionRules(technique) {
|
|
295
|
+
const rules = [];
|
|
296
|
+
switch (technique.id) {
|
|
297
|
+
case 'win-registry-run':
|
|
298
|
+
rules.push('Monitor registry key: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run', 'Monitor registry key: HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run', 'Use Sysmon Event ID 13 (Registry value set) for monitoring', 'Check for executables in user temp directories or unusual locations');
|
|
299
|
+
break;
|
|
300
|
+
case 'win-scheduled-tasks':
|
|
301
|
+
rules.push('Monitor Task Scheduler events (Event ID 106, 140)', 'Use schtasks /query to list all tasks', 'Check for tasks with SYSTEM privileges', 'Monitor XML task files in C:\\Windows\\System32\\Tasks');
|
|
302
|
+
break;
|
|
303
|
+
case 'win-services':
|
|
304
|
+
rules.push('Monitor Service Control Manager events (Event ID 7045)', 'Use sc query to list services', 'Check for services with unusual image paths', 'Monitor service creation via WMI');
|
|
305
|
+
break;
|
|
306
|
+
default:
|
|
307
|
+
rules.push(...technique.detectionMethods);
|
|
308
|
+
}
|
|
309
|
+
return rules;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Generate Linux-specific detection rules
|
|
313
|
+
*/
|
|
314
|
+
generateLinuxDetectionRules(technique) {
|
|
315
|
+
const rules = [];
|
|
316
|
+
switch (technique.id) {
|
|
317
|
+
case 'linux-cron':
|
|
318
|
+
rules.push('Monitor /var/spool/cron/crontabs/', 'Check /etc/crontab and /etc/cron.d/*', 'Use auditd to monitor cron job creation', 'Review system logs for cron execution');
|
|
319
|
+
break;
|
|
320
|
+
case 'linux-systemd':
|
|
321
|
+
rules.push('Monitor /etc/systemd/system/ directory', 'Use systemctl list-unit-files to check services', 'Check for services in /usr/lib/systemd/system/', 'Monitor journalctl for service activity');
|
|
322
|
+
break;
|
|
323
|
+
case 'linux-ssh-keys':
|
|
324
|
+
rules.push('Monitor ~/.ssh/authorized_keys file modifications', 'Check /etc/ssh/sshd_config for authorized keys settings', 'Use auditd to monitor SSH key additions', 'Review SSH authentication logs');
|
|
325
|
+
break;
|
|
326
|
+
default:
|
|
327
|
+
rules.push(...technique.detectionMethods);
|
|
328
|
+
}
|
|
329
|
+
return rules;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Generate test cases for security validation
|
|
333
|
+
*/
|
|
334
|
+
generateTestCases(platform) {
|
|
335
|
+
const techniques = this.getTechniquesByPlatform(platform);
|
|
336
|
+
const testCases = [];
|
|
337
|
+
techniques.forEach(technique => {
|
|
338
|
+
testCases.push(`Test: ${technique.name} (${technique.mitreId || 'N/A'})`);
|
|
339
|
+
testCases.push(`- Description: ${technique.description}`);
|
|
340
|
+
testCases.push(`- Detection Methods: ${technique.detectionMethods.join(', ')}`);
|
|
341
|
+
testCases.push(`- Risk Level: ${technique.riskLevel}`);
|
|
342
|
+
testCases.push('');
|
|
343
|
+
});
|
|
344
|
+
return testCases;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Get remediation guidance for detected techniques
|
|
348
|
+
*/
|
|
349
|
+
getRemediationGuidance(detectedTechniques) {
|
|
350
|
+
const guidance = [];
|
|
351
|
+
detectedTechniques.forEach(detected => {
|
|
352
|
+
guidance.push(`Technique: ${detected.technique.name}`);
|
|
353
|
+
guidance.push(`Confidence: ${detected.confidence}`);
|
|
354
|
+
guidance.push(`Location: ${detected.location}`);
|
|
355
|
+
guidance.push('Remediation Steps:');
|
|
356
|
+
detected.technique.remediationSteps.forEach(step => {
|
|
357
|
+
guidance.push(` - ${step}`);
|
|
358
|
+
});
|
|
359
|
+
guidance.push('');
|
|
360
|
+
});
|
|
361
|
+
return guidance;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=persistence-research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-research.js","sourceRoot":"","sources":["../../src/security/persistence-research.ts"],"names":[],"mappings":"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"}
|