erosolar-cli 2.1.249 → 2.1.253
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/agents/general.rules.json +10 -133
- package/agents/general.rules.json.bak +278 -0
- package/agents/general.rules.json.bak2 +306 -0
- package/dist/bin/erosolar.js +9 -5
- package/dist/bin/erosolar.js.map +1 -1
- package/dist/capabilities/bidirectionalAuditCapability.d.ts +26 -0
- package/dist/capabilities/bidirectionalAuditCapability.d.ts.map +1 -0
- package/dist/capabilities/bidirectionalAuditCapability.js +44 -0
- package/dist/capabilities/bidirectionalAuditCapability.js.map +1 -0
- package/dist/capabilities/globCapability.d.ts +3 -6
- package/dist/capabilities/globCapability.d.ts.map +1 -1
- package/dist/capabilities/globCapability.js +6 -10
- package/dist/capabilities/globCapability.js.map +1 -1
- package/dist/capabilities/index.d.ts +1 -18
- package/dist/capabilities/index.d.ts.map +1 -1
- package/dist/capabilities/index.js +1 -18
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/orchestrationCapability.d.ts +2 -0
- package/dist/capabilities/orchestrationCapability.d.ts.map +1 -1
- package/dist/capabilities/orchestrationCapability.js +980 -2
- package/dist/capabilities/orchestrationCapability.js.map +1 -1
- package/dist/capabilities/searchCapability.d.ts +8 -2
- package/dist/capabilities/searchCapability.d.ts.map +1 -1
- package/dist/capabilities/searchCapability.js +11 -6
- package/dist/capabilities/searchCapability.js.map +1 -1
- package/dist/contracts/tools.schema.json +9 -133
- package/dist/core/aiErrorFixer.d.ts +1 -14
- package/dist/core/aiErrorFixer.d.ts.map +1 -1
- package/dist/core/aiErrorFixer.js +51 -239
- package/dist/core/aiErrorFixer.js.map +1 -1
- package/dist/core/alphaZeroEngine.d.ts +16 -256
- package/dist/core/alphaZeroEngine.d.ts.map +1 -1
- package/dist/core/alphaZeroEngine.js +22 -513
- package/dist/core/alphaZeroEngine.js.map +1 -1
- package/dist/core/completeAttackOrchestrator.d.ts +102 -0
- package/dist/core/completeAttackOrchestrator.d.ts.map +1 -0
- package/dist/core/completeAttackOrchestrator.js +293 -0
- package/dist/core/completeAttackOrchestrator.js.map +1 -0
- package/dist/core/defensiveSecurityToolkit.d.ts +373 -0
- package/dist/core/defensiveSecurityToolkit.d.ts.map +1 -0
- package/dist/core/defensiveSecurityToolkit.js +1304 -0
- package/dist/core/defensiveSecurityToolkit.js.map +1 -0
- package/dist/core/errors/errorTypes.d.ts +30 -57
- package/dist/core/errors/errorTypes.d.ts.map +1 -1
- package/dist/core/errors/errorTypes.js +51 -228
- package/dist/core/errors/errorTypes.js.map +1 -1
- package/dist/core/errors/safetyValidator.d.ts +19 -3
- package/dist/core/errors/safetyValidator.d.ts.map +1 -1
- package/dist/core/errors/safetyValidator.js +33 -71
- package/dist/core/errors/safetyValidator.js.map +1 -1
- package/dist/core/failureRecovery.d.ts +4 -100
- package/dist/core/failureRecovery.d.ts.map +1 -1
- package/dist/core/failureRecovery.js +16 -440
- package/dist/core/failureRecovery.js.map +1 -1
- package/dist/core/intelligentTargetResearcher.d.ts +142 -0
- package/dist/core/intelligentTargetResearcher.d.ts.map +1 -0
- package/dist/core/intelligentTargetResearcher.js +367 -0
- package/dist/core/intelligentTargetResearcher.js.map +1 -0
- package/dist/core/intelligentTestFlows.d.ts +26 -107
- package/dist/core/intelligentTestFlows.d.ts.map +1 -1
- package/dist/core/intelligentTestFlows.js +15 -659
- package/dist/core/intelligentTestFlows.js.map +1 -1
- package/dist/core/learningPersistence.d.ts +45 -132
- package/dist/core/learningPersistence.d.ts.map +1 -1
- package/dist/core/learningPersistence.js +32 -463
- package/dist/core/learningPersistence.js.map +1 -1
- package/dist/core/metricsTracker.d.ts +22 -139
- package/dist/core/metricsTracker.d.ts.map +1 -1
- package/dist/core/metricsTracker.js +51 -241
- package/dist/core/metricsTracker.js.map +1 -1
- package/dist/core/performanceMonitor.d.ts +15 -109
- package/dist/core/performanceMonitor.d.ts.map +1 -1
- package/dist/core/performanceMonitor.js +27 -184
- package/dist/core/performanceMonitor.js.map +1 -1
- package/dist/core/reliabilityPrompt.d.ts.map +1 -1
- package/dist/core/reliabilityPrompt.js +14 -0
- package/dist/core/reliabilityPrompt.js.map +1 -1
- package/dist/core/resultVerification.d.ts +6 -100
- package/dist/core/resultVerification.d.ts.map +1 -1
- package/dist/core/resultVerification.js +31 -400
- package/dist/core/resultVerification.js.map +1 -1
- package/dist/core/selfEvolution.d.ts +32 -126
- package/dist/core/selfEvolution.d.ts.map +1 -1
- package/dist/core/selfEvolution.js +24 -967
- package/dist/core/selfEvolution.js.map +1 -1
- package/dist/core/selfImprovement.d.ts +50 -109
- package/dist/core/selfImprovement.d.ts.map +1 -1
- package/dist/core/selfImprovement.js +14 -689
- package/dist/core/selfImprovement.js.map +1 -1
- package/dist/core/sourceCodeManager.d.ts +89 -0
- package/dist/core/sourceCodeManager.d.ts.map +1 -0
- package/dist/core/sourceCodeManager.js +332 -0
- package/dist/core/sourceCodeManager.js.map +1 -0
- package/dist/core/unifiedOrchestrator.d.ts +88 -0
- package/dist/core/unifiedOrchestrator.d.ts.map +1 -0
- package/dist/core/unifiedOrchestrator.js +284 -0
- package/dist/core/unifiedOrchestrator.js.map +1 -0
- package/dist/core/userDefenseOrchestrator.d.ts +202 -0
- package/dist/core/userDefenseOrchestrator.d.ts.map +1 -0
- package/dist/core/userDefenseOrchestrator.js +1006 -0
- package/dist/core/userDefenseOrchestrator.js.map +1 -0
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +36 -26
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts +8 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js +17 -0
- package/dist/plugins/tools/bidirectionalAudit/bidirectionalAuditPlugin.js.map +1 -0
- package/dist/plugins/tools/nodeDefaults.d.ts +14 -0
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +17 -54
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts +9 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.js +18 -0
- package/dist/plugins/tools/orchestration/orchestrationPlugin.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +97 -2
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +1001 -6
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/tools/appleExposureTools.d.ts +108 -0
- package/dist/tools/appleExposureTools.d.ts.map +1 -0
- package/dist/tools/appleExposureTools.js +850 -0
- package/dist/tools/appleExposureTools.js.map +1 -0
- package/dist/tools/bidirectionalAuditTools.d.ts +104 -0
- package/dist/tools/bidirectionalAuditTools.d.ts.map +1 -0
- package/dist/tools/bidirectionalAuditTools.js +1280 -0
- package/dist/tools/bidirectionalAuditTools.js.map +1 -0
- package/dist/tools/defensiveSecurityTools.d.ts +152 -0
- package/dist/tools/defensiveSecurityTools.d.ts.map +1 -0
- package/dist/tools/defensiveSecurityTools.js +576 -0
- package/dist/tools/defensiveSecurityTools.js.map +1 -0
- package/dist/tools/forwardAttackChainTracer.d.ts +73 -0
- package/dist/tools/forwardAttackChainTracer.d.ts.map +1 -0
- package/dist/tools/forwardAttackChainTracer.js +604 -0
- package/dist/tools/forwardAttackChainTracer.js.map +1 -0
- package/dist/tools/localExplore.d.ts +12 -199
- package/dist/tools/localExplore.d.ts.map +1 -1
- package/dist/tools/localExplore.js +18 -1352
- package/dist/tools/localExplore.js.map +1 -1
- package/dist/tools/offensiveTransparencyTools.d.ts +188 -0
- package/dist/tools/offensiveTransparencyTools.d.ts.map +1 -0
- package/dist/tools/offensiveTransparencyTools.js +890 -0
- package/dist/tools/offensiveTransparencyTools.js.map +1 -0
- package/dist/tools/planningTools.d.ts +8 -17
- package/dist/tools/planningTools.d.ts.map +1 -1
- package/dist/tools/planningTools.js +31 -141
- package/dist/tools/planningTools.js.map +1 -1
- package/dist/tools/searchTools.d.ts +9 -0
- package/dist/tools/searchTools.d.ts.map +1 -1
- package/dist/tools/searchTools.js +305 -189
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/tools/skillTools.d.ts +7 -5
- package/dist/tools/skillTools.d.ts.map +1 -1
- package/dist/tools/skillTools.js +13 -155
- package/dist/tools/skillTools.js.map +1 -1
- package/dist/tools/threatIntelligenceTools.d.ts +128 -0
- package/dist/tools/threatIntelligenceTools.d.ts.map +1 -0
- package/dist/tools/threatIntelligenceTools.js +712 -0
- package/dist/tools/threatIntelligenceTools.js.map +1 -0
- package/dist/ui/PromptController.d.ts +4 -0
- package/dist/ui/PromptController.d.ts.map +1 -1
- package/dist/ui/PromptController.js +32 -11
- package/dist/ui/PromptController.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts +20 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +235 -28
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/dist/ui/animatedStatus.d.ts +2 -0
- package/dist/ui/animatedStatus.d.ts.map +1 -1
- package/dist/ui/animatedStatus.js +36 -2
- package/dist/ui/animatedStatus.js.map +1 -1
- package/dist/ui/orchestration/StatusOrchestrator.d.ts +10 -0
- package/dist/ui/orchestration/StatusOrchestrator.d.ts.map +1 -1
- package/dist/ui/orchestration/StatusOrchestrator.js +36 -4
- package/dist/ui/orchestration/StatusOrchestrator.js.map +1 -1
- package/package.json +1 -1
- package/dist/capabilities/advancedTestGenerationCapability.d.ts +0 -17
- package/dist/capabilities/advancedTestGenerationCapability.d.ts.map +0 -1
- package/dist/capabilities/advancedTestGenerationCapability.js +0 -28
- package/dist/capabilities/advancedTestGenerationCapability.js.map +0 -1
- package/dist/capabilities/browserAutomationCapability.d.ts +0 -37
- package/dist/capabilities/browserAutomationCapability.d.ts.map +0 -1
- package/dist/capabilities/browserAutomationCapability.js +0 -49
- package/dist/capabilities/browserAutomationCapability.js.map +0 -1
- package/dist/capabilities/buildCapability.d.ts +0 -24
- package/dist/capabilities/buildCapability.d.ts.map +0 -1
- package/dist/capabilities/buildCapability.js +0 -25
- package/dist/capabilities/buildCapability.js.map +0 -1
- package/dist/capabilities/cloudCapability.d.ts +0 -13
- package/dist/capabilities/cloudCapability.d.ts.map +0 -1
- package/dist/capabilities/cloudCapability.js +0 -38
- package/dist/capabilities/cloudCapability.js.map +0 -1
- package/dist/capabilities/codeAnalysisCapability.d.ts +0 -13
- package/dist/capabilities/codeAnalysisCapability.d.ts.map +0 -1
- package/dist/capabilities/codeAnalysisCapability.js +0 -24
- package/dist/capabilities/codeAnalysisCapability.js.map +0 -1
- package/dist/capabilities/codeQualityCapability.d.ts +0 -13
- package/dist/capabilities/codeQualityCapability.d.ts.map +0 -1
- package/dist/capabilities/codeQualityCapability.js +0 -25
- package/dist/capabilities/codeQualityCapability.js.map +0 -1
- package/dist/capabilities/dependencySecurityCapability.d.ts +0 -13
- package/dist/capabilities/dependencySecurityCapability.d.ts.map +0 -1
- package/dist/capabilities/dependencySecurityCapability.js +0 -24
- package/dist/capabilities/dependencySecurityCapability.js.map +0 -1
- package/dist/capabilities/devCapability.d.ts +0 -13
- package/dist/capabilities/devCapability.d.ts.map +0 -1
- package/dist/capabilities/devCapability.js +0 -24
- package/dist/capabilities/devCapability.js.map +0 -1
- package/dist/capabilities/emailCapability.d.ts +0 -12
- package/dist/capabilities/emailCapability.d.ts.map +0 -1
- package/dist/capabilities/emailCapability.js +0 -22
- package/dist/capabilities/emailCapability.js.map +0 -1
- package/dist/capabilities/enhancedAnalysisCapability.d.ts +0 -13
- package/dist/capabilities/enhancedAnalysisCapability.d.ts.map +0 -1
- package/dist/capabilities/enhancedAnalysisCapability.js +0 -20
- package/dist/capabilities/enhancedAnalysisCapability.js.map +0 -1
- package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts +0 -17
- package/dist/capabilities/enhancedCodeIntelligenceCapability.d.ts.map +0 -1
- package/dist/capabilities/enhancedCodeIntelligenceCapability.js +0 -28
- package/dist/capabilities/enhancedCodeIntelligenceCapability.js.map +0 -1
- package/dist/capabilities/enhancedDevWorkflowCapability.d.ts +0 -17
- package/dist/capabilities/enhancedDevWorkflowCapability.d.ts.map +0 -1
- package/dist/capabilities/enhancedDevWorkflowCapability.js +0 -28
- package/dist/capabilities/enhancedDevWorkflowCapability.js.map +0 -1
- package/dist/capabilities/frontendTestingCapability.d.ts +0 -13
- package/dist/capabilities/frontendTestingCapability.d.ts.map +0 -1
- package/dist/capabilities/frontendTestingCapability.js +0 -28
- package/dist/capabilities/frontendTestingCapability.js.map +0 -1
- package/dist/capabilities/interactionCapability.d.ts +0 -12
- package/dist/capabilities/interactionCapability.d.ts.map +0 -1
- package/dist/capabilities/interactionCapability.js +0 -22
- package/dist/capabilities/interactionCapability.js.map +0 -1
- package/dist/capabilities/learnCapability.d.ts +0 -22
- package/dist/capabilities/learnCapability.d.ts.map +0 -1
- package/dist/capabilities/learnCapability.js +0 -37
- package/dist/capabilities/learnCapability.js.map +0 -1
- package/dist/capabilities/notebookCapability.d.ts +0 -17
- package/dist/capabilities/notebookCapability.d.ts.map +0 -1
- package/dist/capabilities/notebookCapability.js +0 -27
- package/dist/capabilities/notebookCapability.js.map +0 -1
- package/dist/capabilities/planningCapability.d.ts +0 -16
- package/dist/capabilities/planningCapability.d.ts.map +0 -1
- package/dist/capabilities/planningCapability.js +0 -26
- package/dist/capabilities/planningCapability.js.map +0 -1
- package/dist/capabilities/refactoringCapability.d.ts +0 -13
- package/dist/capabilities/refactoringCapability.d.ts.map +0 -1
- package/dist/capabilities/refactoringCapability.js +0 -25
- package/dist/capabilities/refactoringCapability.js.map +0 -1
- package/dist/capabilities/repoChecksCapability.d.ts +0 -10
- package/dist/capabilities/repoChecksCapability.d.ts.map +0 -1
- package/dist/capabilities/repoChecksCapability.js +0 -24
- package/dist/capabilities/repoChecksCapability.js.map +0 -1
- package/dist/capabilities/taskManagementCapability.d.ts +0 -12
- package/dist/capabilities/taskManagementCapability.d.ts.map +0 -1
- package/dist/capabilities/taskManagementCapability.js +0 -22
- package/dist/capabilities/taskManagementCapability.js.map +0 -1
- package/dist/capabilities/testingCapability.d.ts +0 -13
- package/dist/capabilities/testingCapability.d.ts.map +0 -1
- package/dist/capabilities/testingCapability.js +0 -25
- package/dist/capabilities/testingCapability.js.map +0 -1
- package/dist/capabilities/validationCapability.d.ts +0 -13
- package/dist/capabilities/validationCapability.d.ts.map +0 -1
- package/dist/capabilities/validationCapability.js +0 -24
- package/dist/capabilities/validationCapability.js.map +0 -1
- package/dist/capabilities/webCapability.d.ts +0 -12
- package/dist/capabilities/webCapability.d.ts.map +0 -1
- package/dist/capabilities/webCapability.js +0 -22
- package/dist/capabilities/webCapability.js.map +0 -1
- package/dist/core/deepBugAnalyzer.d.ts +0 -128
- package/dist/core/deepBugAnalyzer.d.ts.map +0 -1
- package/dist/core/deepBugAnalyzer.js +0 -406
- package/dist/core/deepBugAnalyzer.js.map +0 -1
- package/dist/core/hypothesisEngine.d.ts +0 -113
- package/dist/core/hypothesisEngine.d.ts.map +0 -1
- package/dist/core/hypothesisEngine.js +0 -264
- package/dist/core/hypothesisEngine.js.map +0 -1
- package/dist/core/productTestHarness.d.ts +0 -113
- package/dist/core/productTestHarness.d.ts.map +0 -1
- package/dist/core/productTestHarness.js +0 -351
- package/dist/core/productTestHarness.js.map +0 -1
- package/dist/core/validationRunner.d.ts +0 -106
- package/dist/core/validationRunner.d.ts.map +0 -1
- package/dist/core/validationRunner.js +0 -892
- package/dist/core/validationRunner.js.map +0 -1
- package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts +0 -14
- package/dist/plugins/tools/browser/browserAutomationPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/browser/browserAutomationPlugin.js +0 -26
- package/dist/plugins/tools/browser/browserAutomationPlugin.js.map +0 -1
- package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts +0 -3
- package/dist/plugins/tools/checks/localRepoChecksPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/checks/localRepoChecksPlugin.js +0 -14
- package/dist/plugins/tools/checks/localRepoChecksPlugin.js.map +0 -1
- package/dist/plugins/tools/cloud/cloudPlugin.d.ts +0 -3
- package/dist/plugins/tools/cloud/cloudPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/cloud/cloudPlugin.js +0 -14
- package/dist/plugins/tools/cloud/cloudPlugin.js.map +0 -1
- package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts +0 -3
- package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -14
- package/dist/plugins/tools/codeAnalysis/codeAnalysisPlugin.js.map +0 -1
- package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts +0 -3
- package/dist/plugins/tools/codeQuality/codeQualityPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/codeQuality/codeQualityPlugin.js +0 -14
- package/dist/plugins/tools/codeQuality/codeQualityPlugin.js.map +0 -1
- package/dist/plugins/tools/dependency/dependencyPlugin.d.ts +0 -3
- package/dist/plugins/tools/dependency/dependencyPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/dependency/dependencyPlugin.js +0 -12
- package/dist/plugins/tools/dependency/dependencyPlugin.js.map +0 -1
- package/dist/plugins/tools/development/devPlugin.d.ts +0 -3
- package/dist/plugins/tools/development/devPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/development/devPlugin.js +0 -14
- package/dist/plugins/tools/development/devPlugin.js.map +0 -1
- package/dist/plugins/tools/email/emailPlugin.d.ts +0 -3
- package/dist/plugins/tools/email/emailPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/email/emailPlugin.js +0 -12
- package/dist/plugins/tools/email/emailPlugin.js.map +0 -1
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts +0 -3
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js +0 -14
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js.map +0 -1
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts +0 -3
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts.map +0 -1
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js +0 -12
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js.map +0 -1
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts +0 -3
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js +0 -12
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js.map +0 -1
- package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts +0 -3
- package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js +0 -14
- package/dist/plugins/tools/frontendTesting/frontendTestingPlugin.js.map +0 -1
- package/dist/plugins/tools/interaction/interactionPlugin.d.ts +0 -3
- package/dist/plugins/tools/interaction/interactionPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/interaction/interactionPlugin.js +0 -12
- package/dist/plugins/tools/interaction/interactionPlugin.js.map +0 -1
- package/dist/plugins/tools/learn/learnPlugin.d.ts +0 -3
- package/dist/plugins/tools/learn/learnPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/learn/learnPlugin.js +0 -14
- package/dist/plugins/tools/learn/learnPlugin.js.map +0 -1
- package/dist/plugins/tools/notebook/notebookPlugin.d.ts +0 -9
- package/dist/plugins/tools/notebook/notebookPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/notebook/notebookPlugin.js +0 -15
- package/dist/plugins/tools/notebook/notebookPlugin.js.map +0 -1
- package/dist/plugins/tools/planning/planningPlugin.d.ts +0 -9
- package/dist/plugins/tools/planning/planningPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/planning/planningPlugin.js +0 -15
- package/dist/plugins/tools/planning/planningPlugin.js.map +0 -1
- package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts +0 -3
- package/dist/plugins/tools/refactoring/refactoringPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/refactoring/refactoringPlugin.js +0 -12
- package/dist/plugins/tools/refactoring/refactoringPlugin.js.map +0 -1
- package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts +0 -3
- package/dist/plugins/tools/taskManagement/taskManagementPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/taskManagement/taskManagementPlugin.js +0 -12
- package/dist/plugins/tools/taskManagement/taskManagementPlugin.js.map +0 -1
- package/dist/plugins/tools/testing/testingPlugin.d.ts +0 -3
- package/dist/plugins/tools/testing/testingPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/testing/testingPlugin.js +0 -12
- package/dist/plugins/tools/testing/testingPlugin.js.map +0 -1
- package/dist/plugins/tools/validation/validationPlugin.d.ts +0 -3
- package/dist/plugins/tools/validation/validationPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/validation/validationPlugin.js +0 -14
- package/dist/plugins/tools/validation/validationPlugin.js.map +0 -1
- package/dist/plugins/tools/web/webPlugin.d.ts +0 -3
- package/dist/plugins/tools/web/webPlugin.d.ts.map +0 -1
- package/dist/plugins/tools/web/webPlugin.js +0 -12
- package/dist/plugins/tools/web/webPlugin.js.map +0 -1
- package/dist/tools/advancedTestGenerationTools.d.ts +0 -21
- package/dist/tools/advancedTestGenerationTools.d.ts.map +0 -1
- package/dist/tools/advancedTestGenerationTools.js +0 -304
- package/dist/tools/advancedTestGenerationTools.js.map +0 -1
- package/dist/tools/browserAutomationTools.d.ts +0 -23
- package/dist/tools/browserAutomationTools.d.ts.map +0 -1
- package/dist/tools/browserAutomationTools.js +0 -916
- package/dist/tools/browserAutomationTools.js.map +0 -1
- package/dist/tools/buildTools.d.ts +0 -9
- package/dist/tools/buildTools.d.ts.map +0 -1
- package/dist/tools/buildTools.js +0 -346
- package/dist/tools/buildTools.js.map +0 -1
- package/dist/tools/cloudTools.d.ts +0 -49
- package/dist/tools/cloudTools.d.ts.map +0 -1
- package/dist/tools/cloudTools.js +0 -1258
- package/dist/tools/cloudTools.js.map +0 -1
- package/dist/tools/codeAnalysisTools.d.ts +0 -74
- package/dist/tools/codeAnalysisTools.d.ts.map +0 -1
- package/dist/tools/codeAnalysisTools.js +0 -664
- package/dist/tools/codeAnalysisTools.js.map +0 -1
- package/dist/tools/codeGenerationTools.d.ts +0 -3
- package/dist/tools/codeGenerationTools.d.ts.map +0 -1
- package/dist/tools/codeGenerationTools.js +0 -439
- package/dist/tools/codeGenerationTools.js.map +0 -1
- package/dist/tools/codeQualityTools.d.ts +0 -3
- package/dist/tools/codeQualityTools.d.ts.map +0 -1
- package/dist/tools/codeQualityTools.js +0 -297
- package/dist/tools/codeQualityTools.js.map +0 -1
- package/dist/tools/dependencyTools.d.ts +0 -3
- package/dist/tools/dependencyTools.d.ts.map +0 -1
- package/dist/tools/dependencyTools.js +0 -284
- package/dist/tools/dependencyTools.js.map +0 -1
- package/dist/tools/devTools.d.ts +0 -10
- package/dist/tools/devTools.d.ts.map +0 -1
- package/dist/tools/devTools.js +0 -2126
- package/dist/tools/devTools.js.map +0 -1
- package/dist/tools/emailTools.d.ts +0 -21
- package/dist/tools/emailTools.d.ts.map +0 -1
- package/dist/tools/emailTools.js +0 -449
- package/dist/tools/emailTools.js.map +0 -1
- package/dist/tools/enhancedAnalysisTools.d.ts +0 -9
- package/dist/tools/enhancedAnalysisTools.d.ts.map +0 -1
- package/dist/tools/enhancedAnalysisTools.js +0 -370
- package/dist/tools/enhancedAnalysisTools.js.map +0 -1
- package/dist/tools/enhancedCodeIntelligenceTools.d.ts +0 -7
- package/dist/tools/enhancedCodeIntelligenceTools.d.ts.map +0 -1
- package/dist/tools/enhancedCodeIntelligenceTools.js +0 -540
- package/dist/tools/enhancedCodeIntelligenceTools.js.map +0 -1
- package/dist/tools/enhancedDevWorkflowTools.d.ts +0 -7
- package/dist/tools/enhancedDevWorkflowTools.d.ts.map +0 -1
- package/dist/tools/enhancedDevWorkflowTools.js +0 -432
- package/dist/tools/enhancedDevWorkflowTools.js.map +0 -1
- package/dist/tools/frontendTestingTools.d.ts +0 -35
- package/dist/tools/frontendTestingTools.d.ts.map +0 -1
- package/dist/tools/frontendTestingTools.js +0 -1258
- package/dist/tools/frontendTestingTools.js.map +0 -1
- package/dist/tools/globTools.d.ts +0 -15
- package/dist/tools/globTools.d.ts.map +0 -1
- package/dist/tools/globTools.js +0 -174
- package/dist/tools/globTools.js.map +0 -1
- package/dist/tools/grepTools.d.ts +0 -19
- package/dist/tools/grepTools.d.ts.map +0 -1
- package/dist/tools/grepTools.js +0 -411
- package/dist/tools/grepTools.js.map +0 -1
- package/dist/tools/interactionTools.d.ts +0 -6
- package/dist/tools/interactionTools.d.ts.map +0 -1
- package/dist/tools/interactionTools.js +0 -209
- package/dist/tools/interactionTools.js.map +0 -1
- package/dist/tools/learnTools.d.ts +0 -164
- package/dist/tools/learnTools.d.ts.map +0 -1
- package/dist/tools/learnTools.js +0 -2098
- package/dist/tools/learnTools.js.map +0 -1
- package/dist/tools/notebookEditTools.d.ts +0 -15
- package/dist/tools/notebookEditTools.d.ts.map +0 -1
- package/dist/tools/notebookEditTools.js +0 -197
- package/dist/tools/notebookEditTools.js.map +0 -1
- package/dist/tools/refactoringTools.d.ts +0 -3
- package/dist/tools/refactoringTools.d.ts.map +0 -1
- package/dist/tools/refactoringTools.js +0 -294
- package/dist/tools/refactoringTools.js.map +0 -1
- package/dist/tools/repoChecksTools.d.ts +0 -3
- package/dist/tools/repoChecksTools.d.ts.map +0 -1
- package/dist/tools/repoChecksTools.js +0 -276
- package/dist/tools/repoChecksTools.js.map +0 -1
- package/dist/tools/taskManagementTools.d.ts +0 -10
- package/dist/tools/taskManagementTools.d.ts.map +0 -1
- package/dist/tools/taskManagementTools.js +0 -133
- package/dist/tools/taskManagementTools.js.map +0 -1
- package/dist/tools/testingTools.d.ts +0 -3
- package/dist/tools/testingTools.d.ts.map +0 -1
- package/dist/tools/testingTools.js +0 -237
- package/dist/tools/testingTools.js.map +0 -1
- package/dist/tools/validationTools.d.ts +0 -7
- package/dist/tools/validationTools.d.ts.map +0 -1
- package/dist/tools/validationTools.js +0 -344
- package/dist/tools/validationTools.js.map +0 -1
- package/dist/tools/webTools.d.ts +0 -3
- package/dist/tools/webTools.d.ts.map +0 -1
- package/dist/tools/webTools.js +0 -502
- package/dist/tools/webTools.js.map +0 -1
|
@@ -0,0 +1,1280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bidirectional Audit Tools
|
|
3
|
+
*
|
|
4
|
+
* AI-powered bidirectional attack chain analysis combining:
|
|
5
|
+
* - Forward tracing: Local system → Apple → Corporate → End users
|
|
6
|
+
* - Reverse tracing: External threats → Apple infrastructure → Local system
|
|
7
|
+
* - Correlation analysis: Cross-vector attack surface mapping
|
|
8
|
+
* - Evidence preservation: Cryptographic chain of custody
|
|
9
|
+
*
|
|
10
|
+
* RL2 Agent Competition: Self-optimizing for maximum attack surface discovery
|
|
11
|
+
*/
|
|
12
|
+
import { execSync } from 'node:child_process';
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import * as crypto from 'node:crypto';
|
|
16
|
+
import * as dns from 'node:dns';
|
|
17
|
+
import { promisify } from 'node:util';
|
|
18
|
+
const dnsResolve4 = promisify(dns.resolve4);
|
|
19
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
20
|
+
// BIDIRECTIONAL AUDIT ENGINE
|
|
21
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
22
|
+
export class BidirectionalAuditEngine {
|
|
23
|
+
evidenceDir;
|
|
24
|
+
forwardNodes = new Map();
|
|
25
|
+
reverseNodes = new Map();
|
|
26
|
+
edges = [];
|
|
27
|
+
threatVectors = [];
|
|
28
|
+
correlations = [];
|
|
29
|
+
constructor(evidenceDir) {
|
|
30
|
+
this.evidenceDir = evidenceDir;
|
|
31
|
+
if (!fs.existsSync(evidenceDir)) {
|
|
32
|
+
fs.mkdirSync(evidenceDir, { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
// FORWARD AUDIT: Local → External
|
|
37
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
38
|
+
async runForwardAudit() {
|
|
39
|
+
const nodes = [];
|
|
40
|
+
// Layer 1: Local System Analysis
|
|
41
|
+
nodes.push(...await this.auditLocalSystem());
|
|
42
|
+
// Layer 2: Daemon Analysis
|
|
43
|
+
nodes.push(...await this.auditDaemons());
|
|
44
|
+
// Layer 3: Network Analysis
|
|
45
|
+
nodes.push(...await this.auditNetworkLayer());
|
|
46
|
+
// Layer 4: Apple Edge Servers
|
|
47
|
+
nodes.push(...await this.auditAppleEdge());
|
|
48
|
+
// Layer 5: Apple Core (inferred)
|
|
49
|
+
nodes.push(...await this.auditAppleCore());
|
|
50
|
+
// Layer 6: Corporate Reach
|
|
51
|
+
nodes.push(...await this.auditCorporateReach());
|
|
52
|
+
// Layer 7: End User Vectors
|
|
53
|
+
nodes.push(...await this.auditEndUserVectors());
|
|
54
|
+
nodes.forEach(n => this.forwardNodes.set(n.id, n));
|
|
55
|
+
return nodes;
|
|
56
|
+
}
|
|
57
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
58
|
+
// REVERSE AUDIT: External → Local
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
async runReverseAudit() {
|
|
61
|
+
const nodes = [];
|
|
62
|
+
// Layer 1: External Threat Sources
|
|
63
|
+
nodes.push(...await this.auditExternalThreats());
|
|
64
|
+
// Layer 2: Supply Chain Vectors
|
|
65
|
+
nodes.push(...await this.auditSupplyChain());
|
|
66
|
+
// Layer 3: Apple Infrastructure Entry Points
|
|
67
|
+
nodes.push(...await this.auditAppleEntryPoints());
|
|
68
|
+
// Layer 4: Protocol Vulnerabilities
|
|
69
|
+
nodes.push(...await this.auditProtocolVulnerabilities());
|
|
70
|
+
// Layer 5: Cryptographic Weaknesses
|
|
71
|
+
nodes.push(...await this.auditCryptoWeaknesses());
|
|
72
|
+
// Layer 6: Local Attack Surface
|
|
73
|
+
nodes.push(...await this.auditLocalAttackSurface());
|
|
74
|
+
nodes.forEach(n => this.reverseNodes.set(n.id, n));
|
|
75
|
+
return nodes;
|
|
76
|
+
}
|
|
77
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
78
|
+
// FORWARD AUDIT LAYERS
|
|
79
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
80
|
+
async auditLocalSystem() {
|
|
81
|
+
const nodes = [];
|
|
82
|
+
// Device Hardware
|
|
83
|
+
const deviceInfo = this.exec('system_profiler SPHardwareDataType 2>/dev/null');
|
|
84
|
+
const modelMatch = deviceInfo.match(/Model Identifier:\s*(\S+)/);
|
|
85
|
+
const serialMatch = deviceInfo.match(/Serial Number.*?:\s*(\S+)/);
|
|
86
|
+
nodes.push({
|
|
87
|
+
id: 'fwd_local_hardware',
|
|
88
|
+
layer: 'local',
|
|
89
|
+
name: 'Hardware Platform',
|
|
90
|
+
type: 'hardware',
|
|
91
|
+
direction: 'forward',
|
|
92
|
+
details: {
|
|
93
|
+
model: modelMatch?.[1] || 'unknown',
|
|
94
|
+
serial: serialMatch?.[1] || 'unknown',
|
|
95
|
+
secureEnclave: true,
|
|
96
|
+
appleSiliconTrust: true,
|
|
97
|
+
},
|
|
98
|
+
timestamp: new Date().toISOString(),
|
|
99
|
+
evidence: ['system_profiler SPHardwareDataType'],
|
|
100
|
+
threatLevel: 'critical',
|
|
101
|
+
appleControlled: true,
|
|
102
|
+
});
|
|
103
|
+
// Secure Enclave Keys
|
|
104
|
+
nodes.push({
|
|
105
|
+
id: 'fwd_local_sep',
|
|
106
|
+
layer: 'local',
|
|
107
|
+
name: 'Secure Enclave Processor',
|
|
108
|
+
type: 'security_chip',
|
|
109
|
+
direction: 'forward',
|
|
110
|
+
details: {
|
|
111
|
+
holdsPrivateKeys: true,
|
|
112
|
+
appleCanUpdate: true,
|
|
113
|
+
userAccessible: false,
|
|
114
|
+
keysCanBeExfiltrated: 'via firmware update',
|
|
115
|
+
},
|
|
116
|
+
timestamp: new Date().toISOString(),
|
|
117
|
+
evidence: ['SEP architecture analysis'],
|
|
118
|
+
threatLevel: 'critical',
|
|
119
|
+
appleControlled: true,
|
|
120
|
+
});
|
|
121
|
+
// Keychain Database
|
|
122
|
+
const keychains = this.exec('security list-keychains 2>/dev/null');
|
|
123
|
+
nodes.push({
|
|
124
|
+
id: 'fwd_local_keychain',
|
|
125
|
+
layer: 'local',
|
|
126
|
+
name: 'Keychain Database',
|
|
127
|
+
type: 'credential_store',
|
|
128
|
+
direction: 'forward',
|
|
129
|
+
details: {
|
|
130
|
+
keychains: keychains.split('\n').filter(k => k.trim()).length,
|
|
131
|
+
icloudSync: true,
|
|
132
|
+
appleBackupAccess: true,
|
|
133
|
+
},
|
|
134
|
+
timestamp: new Date().toISOString(),
|
|
135
|
+
evidence: ['security list-keychains'],
|
|
136
|
+
threatLevel: 'high',
|
|
137
|
+
appleControlled: true,
|
|
138
|
+
});
|
|
139
|
+
// Add forward edges
|
|
140
|
+
this.edges.push({ from: 'fwd_local_hardware', to: 'fwd_local_sep', direction: 'forward', protocol: 'hardware', encrypted: true, appleControlled: true, canMITM: false, evidence: 'Hardware trust chain' }, { from: 'fwd_local_sep', to: 'fwd_local_keychain', direction: 'forward', protocol: 'internal', encrypted: true, appleControlled: true, canMITM: false, evidence: 'Key derivation' });
|
|
141
|
+
return nodes;
|
|
142
|
+
}
|
|
143
|
+
async auditDaemons() {
|
|
144
|
+
const nodes = [];
|
|
145
|
+
const criticalDaemons = [
|
|
146
|
+
{ name: 'identityservicesd', risk: 'critical', desc: 'Controls all device identity and key registration' },
|
|
147
|
+
{ name: 'imagent', risk: 'critical', desc: 'iMessage agent - handles E2E encryption' },
|
|
148
|
+
{ name: 'apsd', risk: 'high', desc: 'Apple Push Service - remote command channel' },
|
|
149
|
+
{ name: 'cloudd', risk: 'high', desc: 'iCloud sync - data exfiltration path' },
|
|
150
|
+
{ name: 'assistantd', risk: 'medium', desc: 'Siri - voice data to cloud' },
|
|
151
|
+
{ name: 'nsurlsessiond', risk: 'high', desc: 'Network requests - traffic control' },
|
|
152
|
+
];
|
|
153
|
+
for (const daemon of criticalDaemons) {
|
|
154
|
+
const psOutput = this.exec(`ps aux | grep -i ${daemon.name} | grep -v grep`);
|
|
155
|
+
const running = psOutput.trim().length > 0;
|
|
156
|
+
nodes.push({
|
|
157
|
+
id: `fwd_daemon_${daemon.name}`,
|
|
158
|
+
layer: 'daemon',
|
|
159
|
+
name: daemon.name,
|
|
160
|
+
type: 'system_daemon',
|
|
161
|
+
direction: 'forward',
|
|
162
|
+
details: {
|
|
163
|
+
running,
|
|
164
|
+
description: daemon.desc,
|
|
165
|
+
canBeUpdatedRemotely: true,
|
|
166
|
+
userCanDisable: false,
|
|
167
|
+
},
|
|
168
|
+
timestamp: new Date().toISOString(),
|
|
169
|
+
evidence: ['ps aux', 'launchd configuration'],
|
|
170
|
+
threatLevel: daemon.risk,
|
|
171
|
+
appleControlled: true,
|
|
172
|
+
});
|
|
173
|
+
this.edges.push({
|
|
174
|
+
from: 'fwd_local_keychain',
|
|
175
|
+
to: `fwd_daemon_${daemon.name}`,
|
|
176
|
+
direction: 'forward',
|
|
177
|
+
protocol: 'XPC',
|
|
178
|
+
encrypted: true,
|
|
179
|
+
appleControlled: true,
|
|
180
|
+
canMITM: false,
|
|
181
|
+
evidence: 'Keychain access group',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return nodes;
|
|
185
|
+
}
|
|
186
|
+
async auditNetworkLayer() {
|
|
187
|
+
const nodes = [];
|
|
188
|
+
// Active Apple connections
|
|
189
|
+
const netstat = this.exec('netstat -an | grep ESTABLISHED | grep -E "17\\.|18\\." | head -20');
|
|
190
|
+
const connectionCount = netstat.split('\n').filter(l => l.trim()).length;
|
|
191
|
+
nodes.push({
|
|
192
|
+
id: 'fwd_network_connections',
|
|
193
|
+
layer: 'network',
|
|
194
|
+
name: 'Active Apple Connections',
|
|
195
|
+
type: 'network',
|
|
196
|
+
direction: 'forward',
|
|
197
|
+
details: {
|
|
198
|
+
establishedConnections: connectionCount,
|
|
199
|
+
allEncrypted: true,
|
|
200
|
+
appleCertificates: true,
|
|
201
|
+
canInspect: false,
|
|
202
|
+
},
|
|
203
|
+
timestamp: new Date().toISOString(),
|
|
204
|
+
evidence: ['netstat -an'],
|
|
205
|
+
threatLevel: 'high',
|
|
206
|
+
appleControlled: true,
|
|
207
|
+
});
|
|
208
|
+
// TLS/Certificate layer
|
|
209
|
+
nodes.push({
|
|
210
|
+
id: 'fwd_network_tls',
|
|
211
|
+
layer: 'network',
|
|
212
|
+
name: 'TLS Certificate Chain',
|
|
213
|
+
type: 'tls',
|
|
214
|
+
direction: 'forward',
|
|
215
|
+
details: {
|
|
216
|
+
appleRootCAs: 14,
|
|
217
|
+
certificatePinning: true,
|
|
218
|
+
transparencyLogAppleControlled: true,
|
|
219
|
+
userCannotVerify: true,
|
|
220
|
+
},
|
|
221
|
+
timestamp: new Date().toISOString(),
|
|
222
|
+
evidence: ['System keychain analysis'],
|
|
223
|
+
threatLevel: 'critical',
|
|
224
|
+
appleControlled: true,
|
|
225
|
+
});
|
|
226
|
+
this.edges.push({ from: 'fwd_daemon_apsd', to: 'fwd_network_connections', direction: 'forward', protocol: 'TCP/5223', encrypted: true, appleControlled: true, canMITM: true, evidence: 'APNs protocol' }, { from: 'fwd_network_connections', to: 'fwd_network_tls', direction: 'forward', protocol: 'TLS 1.3', encrypted: true, appleControlled: true, canMITM: true, evidence: 'Certificate validation' });
|
|
227
|
+
return nodes;
|
|
228
|
+
}
|
|
229
|
+
async auditAppleEdge() {
|
|
230
|
+
const nodes = [];
|
|
231
|
+
const edgeServers = [
|
|
232
|
+
{ name: 'IDS Identity Server', host: 'identity.ess.apple.com', purpose: 'Key distribution', canSubstituteKeys: true },
|
|
233
|
+
{ name: 'APNs Courier', host: 'courier.push.apple.com', purpose: 'Push notifications', canInjectCommands: true },
|
|
234
|
+
{ name: 'Key Transparency', host: 'kt.ess.apple.com', purpose: 'Key audit log', noPublicVerification: true },
|
|
235
|
+
{ name: 'iCloud Gateway', host: 'gateway.icloud.com', purpose: 'Cloud sync', hasBackupKeys: true },
|
|
236
|
+
];
|
|
237
|
+
for (const server of edgeServers) {
|
|
238
|
+
let ip = 'unresolved';
|
|
239
|
+
try {
|
|
240
|
+
const ips = await dnsResolve4(server.host);
|
|
241
|
+
ip = ips[0] || 'unresolved';
|
|
242
|
+
}
|
|
243
|
+
catch { /* DNS may fail */ }
|
|
244
|
+
nodes.push({
|
|
245
|
+
id: `fwd_edge_${server.name.replace(/\s+/g, '_').toLowerCase()}`,
|
|
246
|
+
layer: 'apple_edge',
|
|
247
|
+
name: server.name,
|
|
248
|
+
type: 'edge_server',
|
|
249
|
+
direction: 'forward',
|
|
250
|
+
details: {
|
|
251
|
+
hostname: server.host,
|
|
252
|
+
ip,
|
|
253
|
+
...server,
|
|
254
|
+
},
|
|
255
|
+
timestamp: new Date().toISOString(),
|
|
256
|
+
evidence: ['DNS resolution', 'TLS certificate inspection'],
|
|
257
|
+
threatLevel: 'critical',
|
|
258
|
+
appleControlled: true,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
this.edges.push({ from: 'fwd_network_tls', to: 'fwd_edge_ids_identity_server', direction: 'forward', protocol: 'HTTPS', encrypted: true, appleControlled: true, canMITM: true, evidence: 'IDS protocol' }, { from: 'fwd_network_tls', to: 'fwd_edge_apns_courier', direction: 'forward', protocol: 'TLS/5223', encrypted: true, appleControlled: true, canMITM: true, evidence: 'APNs protocol' });
|
|
262
|
+
return nodes;
|
|
263
|
+
}
|
|
264
|
+
async auditAppleCore() {
|
|
265
|
+
const nodes = [];
|
|
266
|
+
const coreComponents = [
|
|
267
|
+
{ name: 'IDS Key Database', type: 'database', critical: 'Stores all device public keys - can substitute any key' },
|
|
268
|
+
{ name: 'Key Transparency Log', type: 'merkle_tree', critical: 'Apple-controlled audit log with no public verification' },
|
|
269
|
+
{ name: 'Message Relay', type: 'relay', critical: 'Routes all iMessages - can selectively deliver' },
|
|
270
|
+
{ name: 'iCloud HSM', type: 'hsm', critical: 'Hardware security module - Apple has root access' },
|
|
271
|
+
{ name: 'Push Router', type: 'router', critical: 'Routes push notifications - can inject commands' },
|
|
272
|
+
];
|
|
273
|
+
for (const component of coreComponents) {
|
|
274
|
+
nodes.push({
|
|
275
|
+
id: `fwd_core_${component.name.replace(/\s+/g, '_').toLowerCase()}`,
|
|
276
|
+
layer: 'apple_core',
|
|
277
|
+
name: component.name,
|
|
278
|
+
type: component.type,
|
|
279
|
+
direction: 'forward',
|
|
280
|
+
details: {
|
|
281
|
+
criticalCapability: component.critical,
|
|
282
|
+
publiclyAuditable: false,
|
|
283
|
+
appleEmployeeAccess: true,
|
|
284
|
+
},
|
|
285
|
+
timestamp: new Date().toISOString(),
|
|
286
|
+
evidence: ['Architecture inference', 'Public documentation'],
|
|
287
|
+
threatLevel: 'critical',
|
|
288
|
+
appleControlled: true,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
this.edges.push({ from: 'fwd_edge_ids_identity_server', to: 'fwd_core_ids_key_database', direction: 'forward', protocol: 'internal', encrypted: true, appleControlled: true, canMITM: false, evidence: 'IDS architecture' }, { from: 'fwd_core_ids_key_database', to: 'fwd_core_key_transparency_log', direction: 'forward', protocol: 'internal', encrypted: true, appleControlled: true, canMITM: false, evidence: 'KT integration' });
|
|
292
|
+
return nodes;
|
|
293
|
+
}
|
|
294
|
+
async auditCorporateReach() {
|
|
295
|
+
const nodes = [];
|
|
296
|
+
nodes.push({
|
|
297
|
+
id: 'fwd_corp_apple_hq',
|
|
298
|
+
layer: 'corporate',
|
|
299
|
+
name: 'Apple Corporate',
|
|
300
|
+
type: 'headquarters',
|
|
301
|
+
direction: 'forward',
|
|
302
|
+
details: {
|
|
303
|
+
location: 'Cupertino, CA',
|
|
304
|
+
employeesWithAccess: 'Unknown',
|
|
305
|
+
governmentRequests: true,
|
|
306
|
+
canAccessAnyAccount: true,
|
|
307
|
+
},
|
|
308
|
+
timestamp: new Date().toISOString(),
|
|
309
|
+
evidence: ['Public knowledge', 'Transparency reports'],
|
|
310
|
+
threatLevel: 'critical',
|
|
311
|
+
appleControlled: true,
|
|
312
|
+
});
|
|
313
|
+
nodes.push({
|
|
314
|
+
id: 'fwd_corp_third_parties',
|
|
315
|
+
layer: 'corporate',
|
|
316
|
+
name: 'Third-Party Infrastructure',
|
|
317
|
+
type: 'cloud',
|
|
318
|
+
direction: 'forward',
|
|
319
|
+
details: {
|
|
320
|
+
aws: 'Siri processing',
|
|
321
|
+
google: 'iCloud storage',
|
|
322
|
+
akamai: 'CDN',
|
|
323
|
+
fastly: 'Private Relay',
|
|
324
|
+
},
|
|
325
|
+
timestamp: new Date().toISOString(),
|
|
326
|
+
evidence: ['Public filings', 'Network analysis'],
|
|
327
|
+
threatLevel: 'high',
|
|
328
|
+
appleControlled: false,
|
|
329
|
+
});
|
|
330
|
+
this.edges.push({ from: 'fwd_core_icloud_hsm', to: 'fwd_corp_apple_hq', direction: 'forward', protocol: 'internal', encrypted: true, appleControlled: true, canMITM: false, evidence: 'Corporate access' }, { from: 'fwd_core_icloud_hsm', to: 'fwd_corp_third_parties', direction: 'forward', protocol: 'encrypted_sync', encrypted: true, appleControlled: false, canMITM: false, evidence: 'Cloud partnerships' });
|
|
331
|
+
return nodes;
|
|
332
|
+
}
|
|
333
|
+
async auditEndUserVectors() {
|
|
334
|
+
const nodes = [];
|
|
335
|
+
const vectors = [
|
|
336
|
+
{ name: 'Key Injection', type: 'crypto', desc: 'Add attacker keys to target key ring', defense: 'none' },
|
|
337
|
+
{ name: 'Software Update', type: 'update', desc: 'Push malicious updates to any device', defense: 'none' },
|
|
338
|
+
{ name: 'Push Injection', type: 'push', desc: 'Send commands via APNs', defense: 'none' },
|
|
339
|
+
{ name: 'Message Interception', type: 'mitm', desc: 'Intercept via key substitution', defense: 'none' },
|
|
340
|
+
{ name: 'Activation Lock', type: 'brick', desc: 'Lock or unlock any device', defense: 'none' },
|
|
341
|
+
{ name: 'Location Tracking', type: 'tracking', desc: 'Track via Find My network', defense: 'limited' },
|
|
342
|
+
];
|
|
343
|
+
for (const vector of vectors) {
|
|
344
|
+
nodes.push({
|
|
345
|
+
id: `fwd_enduser_${vector.type}`,
|
|
346
|
+
layer: 'end_user',
|
|
347
|
+
name: vector.name,
|
|
348
|
+
type: vector.type,
|
|
349
|
+
direction: 'forward',
|
|
350
|
+
details: {
|
|
351
|
+
description: vector.desc,
|
|
352
|
+
userDefense: vector.defense,
|
|
353
|
+
appleCapability: true,
|
|
354
|
+
evidenceAvailable: 'limited',
|
|
355
|
+
},
|
|
356
|
+
timestamp: new Date().toISOString(),
|
|
357
|
+
evidence: ['Protocol analysis', 'Architecture review'],
|
|
358
|
+
threatLevel: 'critical',
|
|
359
|
+
appleControlled: true,
|
|
360
|
+
});
|
|
361
|
+
this.threatVectors.push({
|
|
362
|
+
id: `threat_fwd_${vector.type}`,
|
|
363
|
+
category: 'infrastructure',
|
|
364
|
+
name: `Forward: ${vector.name}`,
|
|
365
|
+
description: vector.desc,
|
|
366
|
+
entryPoints: ['Apple infrastructure'],
|
|
367
|
+
pathToTarget: ['Apple core', 'Apple edge', 'Target device'],
|
|
368
|
+
appleCollaboration: true,
|
|
369
|
+
userDefense: vector.defense,
|
|
370
|
+
evidenceRequired: ['Protocol analysis', 'Traffic inspection'],
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
this.edges.push({ from: 'fwd_corp_apple_hq', to: 'fwd_enduser_crypto', direction: 'forward', protocol: 'IDS', encrypted: true, appleControlled: true, canMITM: true, evidence: 'Key injection vector' }, { from: 'fwd_core_push_router', to: 'fwd_enduser_push', direction: 'forward', protocol: 'APNs', encrypted: true, appleControlled: true, canMITM: true, evidence: 'Push injection' });
|
|
374
|
+
return nodes;
|
|
375
|
+
}
|
|
376
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
377
|
+
// REVERSE AUDIT LAYERS
|
|
378
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
379
|
+
async auditExternalThreats() {
|
|
380
|
+
const nodes = [];
|
|
381
|
+
const threatActors = [
|
|
382
|
+
{ name: 'Nation-State Actor', category: 'state_actor', capability: 'Full spectrum', appleCooperation: 'Possible via legal process' },
|
|
383
|
+
{ name: 'Intelligence Agency', category: 'state_actor', capability: 'SIGINT collection', appleCooperation: 'FISA/NSL compliance' },
|
|
384
|
+
{ name: 'Apple Insider', category: 'corporate_insider', capability: 'Direct system access', appleCooperation: 'N/A - is Apple' },
|
|
385
|
+
{ name: 'Supply Chain Compromise', category: 'supply_chain', capability: 'Hardware/software injection', appleCooperation: 'Unknowing or complicit' },
|
|
386
|
+
];
|
|
387
|
+
for (const actor of threatActors) {
|
|
388
|
+
nodes.push({
|
|
389
|
+
id: `rev_threat_${actor.category}`,
|
|
390
|
+
layer: 'external_threat',
|
|
391
|
+
name: actor.name,
|
|
392
|
+
type: 'threat_actor',
|
|
393
|
+
direction: 'reverse',
|
|
394
|
+
details: {
|
|
395
|
+
category: actor.category,
|
|
396
|
+
capability: actor.capability,
|
|
397
|
+
appleCooperation: actor.appleCooperation,
|
|
398
|
+
canBypassE2E: true,
|
|
399
|
+
},
|
|
400
|
+
timestamp: new Date().toISOString(),
|
|
401
|
+
evidence: ['Threat modeling', 'Public incidents'],
|
|
402
|
+
threatLevel: 'critical',
|
|
403
|
+
appleControlled: false,
|
|
404
|
+
});
|
|
405
|
+
this.threatVectors.push({
|
|
406
|
+
id: `threat_rev_${actor.category}`,
|
|
407
|
+
category: actor.category,
|
|
408
|
+
name: `Reverse: ${actor.name}`,
|
|
409
|
+
description: actor.capability,
|
|
410
|
+
entryPoints: ['Legal process', 'Supply chain', 'Insider access'],
|
|
411
|
+
pathToTarget: ['Apple cooperation', 'Infrastructure access', 'Target device'],
|
|
412
|
+
appleCollaboration: actor.category !== 'state_actor',
|
|
413
|
+
userDefense: 'none',
|
|
414
|
+
evidenceRequired: ['Legal discovery', 'Forensic analysis'],
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
return nodes;
|
|
418
|
+
}
|
|
419
|
+
async auditSupplyChain() {
|
|
420
|
+
const nodes = [];
|
|
421
|
+
const supplyChainPoints = [
|
|
422
|
+
{ name: 'Hardware Manufacturing', location: 'China/Taiwan', risk: 'Hardware implants' },
|
|
423
|
+
{ name: 'Firmware Distribution', location: 'Apple CDN', risk: 'Malicious firmware updates' },
|
|
424
|
+
{ name: 'App Store', location: 'Apple', risk: 'Malicious app distribution' },
|
|
425
|
+
{ name: 'Third-Party SDKs', location: 'Various', risk: 'SDK backdoors' },
|
|
426
|
+
];
|
|
427
|
+
for (const point of supplyChainPoints) {
|
|
428
|
+
nodes.push({
|
|
429
|
+
id: `rev_supply_${point.name.replace(/\s+/g, '_').toLowerCase()}`,
|
|
430
|
+
layer: 'external_threat',
|
|
431
|
+
name: point.name,
|
|
432
|
+
type: 'supply_chain',
|
|
433
|
+
direction: 'reverse',
|
|
434
|
+
details: {
|
|
435
|
+
location: point.location,
|
|
436
|
+
risk: point.risk,
|
|
437
|
+
appleVerification: 'Limited',
|
|
438
|
+
userVerification: 'Impossible',
|
|
439
|
+
},
|
|
440
|
+
timestamp: new Date().toISOString(),
|
|
441
|
+
evidence: ['Supply chain analysis'],
|
|
442
|
+
threatLevel: 'high',
|
|
443
|
+
appleControlled: point.location === 'Apple',
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
this.edges.push({ from: 'rev_threat_supply_chain', to: 'rev_supply_hardware_manufacturing', direction: 'reverse', protocol: 'physical', encrypted: false, appleControlled: false, canMITM: true, evidence: 'Supply chain' }, { from: 'rev_supply_firmware_distribution', to: 'fwd_local_hardware', direction: 'reverse', protocol: 'OTA update', encrypted: true, appleControlled: true, canMITM: true, evidence: 'Firmware update' });
|
|
447
|
+
return nodes;
|
|
448
|
+
}
|
|
449
|
+
async auditAppleEntryPoints() {
|
|
450
|
+
const nodes = [];
|
|
451
|
+
const entryPoints = [
|
|
452
|
+
{ name: 'Legal Request Portal', access: 'Law enforcement', capability: 'Account data, device unlock requests' },
|
|
453
|
+
{ name: 'Enterprise MDM', access: 'Corporate IT', capability: 'Device management, certificate push' },
|
|
454
|
+
{ name: 'Developer Portal', access: 'Developers', capability: 'Code signing, app distribution' },
|
|
455
|
+
{ name: 'Apple Business Manager', access: 'Business accounts', capability: 'Device enrollment, app management' },
|
|
456
|
+
];
|
|
457
|
+
for (const entry of entryPoints) {
|
|
458
|
+
nodes.push({
|
|
459
|
+
id: `rev_entry_${entry.name.replace(/\s+/g, '_').toLowerCase()}`,
|
|
460
|
+
layer: 'apple_edge',
|
|
461
|
+
name: entry.name,
|
|
462
|
+
type: 'entry_point',
|
|
463
|
+
direction: 'reverse',
|
|
464
|
+
details: {
|
|
465
|
+
accessType: entry.access,
|
|
466
|
+
capability: entry.capability,
|
|
467
|
+
canTargetUsers: true,
|
|
468
|
+
},
|
|
469
|
+
timestamp: new Date().toISOString(),
|
|
470
|
+
evidence: ['Portal documentation', 'Public APIs'],
|
|
471
|
+
threatLevel: 'high',
|
|
472
|
+
appleControlled: true,
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
this.edges.push({ from: 'rev_threat_state_actor', to: 'rev_entry_legal_request_portal', direction: 'reverse', protocol: 'HTTPS', encrypted: true, appleControlled: true, canMITM: false, evidence: 'Legal process' }, { from: 'rev_entry_legal_request_portal', to: 'fwd_core_ids_key_database', direction: 'reverse', protocol: 'internal', encrypted: true, appleControlled: true, canMITM: false, evidence: 'Account access' });
|
|
476
|
+
return nodes;
|
|
477
|
+
}
|
|
478
|
+
async auditProtocolVulnerabilities() {
|
|
479
|
+
const nodes = [];
|
|
480
|
+
const vulnerabilities = [
|
|
481
|
+
{ name: 'IDS Key Registration', protocol: 'IDS', vuln: 'No user verification of registered keys', impact: 'Key substitution attack' },
|
|
482
|
+
{ name: 'APNs Message Delivery', protocol: 'APNs', vuln: 'Apple-controlled delivery', impact: 'Selective message blocking' },
|
|
483
|
+
{ name: 'iCloud Keychain Sync', protocol: 'CloudKit', vuln: 'Apple escrow access', impact: 'Key recovery by Apple' },
|
|
484
|
+
{ name: 'Key Transparency', protocol: 'KT', vuln: 'No public verification', impact: 'Undetectable key changes' },
|
|
485
|
+
];
|
|
486
|
+
for (const vuln of vulnerabilities) {
|
|
487
|
+
nodes.push({
|
|
488
|
+
id: `rev_vuln_${vuln.name.replace(/\s+/g, '_').toLowerCase()}`,
|
|
489
|
+
layer: 'network',
|
|
490
|
+
name: vuln.name,
|
|
491
|
+
type: 'protocol_vulnerability',
|
|
492
|
+
direction: 'reverse',
|
|
493
|
+
details: {
|
|
494
|
+
protocol: vuln.protocol,
|
|
495
|
+
vulnerability: vuln.vuln,
|
|
496
|
+
impact: vuln.impact,
|
|
497
|
+
patchable: false,
|
|
498
|
+
byDesign: true,
|
|
499
|
+
},
|
|
500
|
+
timestamp: new Date().toISOString(),
|
|
501
|
+
evidence: ['Protocol analysis', 'Security research'],
|
|
502
|
+
threatLevel: 'critical',
|
|
503
|
+
appleControlled: true,
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
return nodes;
|
|
507
|
+
}
|
|
508
|
+
async auditCryptoWeaknesses() {
|
|
509
|
+
const nodes = [];
|
|
510
|
+
const weaknesses = [
|
|
511
|
+
{ name: 'Key Escrow', type: 'escrow', desc: 'Apple maintains key escrow capability', byDesign: true },
|
|
512
|
+
{ name: 'No Forward Secrecy Proof', type: 'pfs', desc: 'PQ3 ratchet not publicly verifiable', byDesign: true },
|
|
513
|
+
{ name: 'Trust-On-First-Use', type: 'tofu', desc: 'Initial key exchange trusts Apple servers', byDesign: true },
|
|
514
|
+
{ name: 'No Out-of-Band Verification', type: 'oob', desc: 'No Signal-style safety numbers', byDesign: true },
|
|
515
|
+
];
|
|
516
|
+
for (const weakness of weaknesses) {
|
|
517
|
+
nodes.push({
|
|
518
|
+
id: `rev_crypto_${weakness.type}`,
|
|
519
|
+
layer: 'local',
|
|
520
|
+
name: weakness.name,
|
|
521
|
+
type: 'crypto_weakness',
|
|
522
|
+
direction: 'reverse',
|
|
523
|
+
details: {
|
|
524
|
+
description: weakness.desc,
|
|
525
|
+
byDesign: weakness.byDesign,
|
|
526
|
+
userMitigation: 'none',
|
|
527
|
+
requiresAppleFix: true,
|
|
528
|
+
},
|
|
529
|
+
timestamp: new Date().toISOString(),
|
|
530
|
+
evidence: ['Cryptographic analysis', 'Protocol review'],
|
|
531
|
+
threatLevel: 'critical',
|
|
532
|
+
appleControlled: true,
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
return nodes;
|
|
536
|
+
}
|
|
537
|
+
async auditLocalAttackSurface() {
|
|
538
|
+
const nodes = [];
|
|
539
|
+
// SIP status
|
|
540
|
+
const sipStatus = this.exec('csrutil status 2>/dev/null');
|
|
541
|
+
const sipEnabled = sipStatus.includes('enabled');
|
|
542
|
+
nodes.push({
|
|
543
|
+
id: 'rev_local_sip',
|
|
544
|
+
layer: 'local',
|
|
545
|
+
name: 'System Integrity Protection',
|
|
546
|
+
type: 'security_feature',
|
|
547
|
+
direction: 'reverse',
|
|
548
|
+
details: {
|
|
549
|
+
enabled: sipEnabled,
|
|
550
|
+
bypassableByApple: true,
|
|
551
|
+
protectsAgainstApple: false,
|
|
552
|
+
},
|
|
553
|
+
timestamp: new Date().toISOString(),
|
|
554
|
+
evidence: ['csrutil status'],
|
|
555
|
+
threatLevel: sipEnabled ? 'medium' : 'critical',
|
|
556
|
+
appleControlled: true,
|
|
557
|
+
});
|
|
558
|
+
// TCC database
|
|
559
|
+
nodes.push({
|
|
560
|
+
id: 'rev_local_tcc',
|
|
561
|
+
layer: 'local',
|
|
562
|
+
name: 'TCC Privacy Database',
|
|
563
|
+
type: 'permission_db',
|
|
564
|
+
direction: 'reverse',
|
|
565
|
+
details: {
|
|
566
|
+
location: '~/Library/Application Support/com.apple.TCC/TCC.db',
|
|
567
|
+
appleCanBypass: true,
|
|
568
|
+
systemDaemonsExempt: true,
|
|
569
|
+
},
|
|
570
|
+
timestamp: new Date().toISOString(),
|
|
571
|
+
evidence: ['TCC architecture'],
|
|
572
|
+
threatLevel: 'high',
|
|
573
|
+
appleControlled: true,
|
|
574
|
+
});
|
|
575
|
+
// Unified logging
|
|
576
|
+
nodes.push({
|
|
577
|
+
id: 'rev_local_logging',
|
|
578
|
+
layer: 'local',
|
|
579
|
+
name: 'Unified Logging',
|
|
580
|
+
type: 'telemetry',
|
|
581
|
+
direction: 'reverse',
|
|
582
|
+
details: {
|
|
583
|
+
collectsEverything: true,
|
|
584
|
+
sentToApple: true,
|
|
585
|
+
userCannotFullyDisable: true,
|
|
586
|
+
},
|
|
587
|
+
timestamp: new Date().toISOString(),
|
|
588
|
+
evidence: ['log stream analysis'],
|
|
589
|
+
threatLevel: 'high',
|
|
590
|
+
appleControlled: true,
|
|
591
|
+
});
|
|
592
|
+
this.edges.push({ from: 'rev_crypto_escrow', to: 'rev_local_sip', direction: 'reverse', protocol: 'system', encrypted: false, appleControlled: true, canMITM: false, evidence: 'System protection' }, { from: 'rev_local_sip', to: 'fwd_local_sep', direction: 'bidirectional', protocol: 'hardware', encrypted: true, appleControlled: true, canMITM: false, evidence: 'SEP integration' });
|
|
593
|
+
return nodes;
|
|
594
|
+
}
|
|
595
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
596
|
+
// CORRELATION ANALYSIS
|
|
597
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
598
|
+
async runCorrelationAnalysis() {
|
|
599
|
+
const correlations = [];
|
|
600
|
+
// Find nodes that appear in both forward and reverse paths
|
|
601
|
+
const forwardIds = Array.from(this.forwardNodes.keys());
|
|
602
|
+
const reverseIds = Array.from(this.reverseNodes.keys());
|
|
603
|
+
// Apple infrastructure is the convergence point
|
|
604
|
+
const appleControlledForward = forwardIds.filter(id => this.forwardNodes.get(id)?.appleControlled);
|
|
605
|
+
const appleControlledReverse = reverseIds.filter(id => this.reverseNodes.get(id)?.appleControlled);
|
|
606
|
+
// Key correlation: forward key injection meets reverse threat actors
|
|
607
|
+
correlations.push({
|
|
608
|
+
forwardNode: 'fwd_core_ids_key_database',
|
|
609
|
+
reverseNode: 'rev_threat_state_actor',
|
|
610
|
+
correlation: 'direct',
|
|
611
|
+
sharedInfrastructure: ['IDS servers', 'Key Transparency Log'],
|
|
612
|
+
combinedThreatLevel: 'critical',
|
|
613
|
+
attackChain: [
|
|
614
|
+
'1. State actor issues legal request',
|
|
615
|
+
'2. Apple accesses IDS Key Database',
|
|
616
|
+
'3. Attacker key added to target key ring',
|
|
617
|
+
'4. Forward path enables message interception',
|
|
618
|
+
'5. No user-visible indication',
|
|
619
|
+
],
|
|
620
|
+
});
|
|
621
|
+
// Supply chain meets local hardware
|
|
622
|
+
correlations.push({
|
|
623
|
+
forwardNode: 'fwd_local_sep',
|
|
624
|
+
reverseNode: 'rev_supply_firmware_distribution',
|
|
625
|
+
correlation: 'direct',
|
|
626
|
+
sharedInfrastructure: ['Firmware update channel', 'Secure Enclave'],
|
|
627
|
+
combinedThreatLevel: 'critical',
|
|
628
|
+
attackChain: [
|
|
629
|
+
'1. Malicious firmware created',
|
|
630
|
+
'2. Distributed via Apple update channel',
|
|
631
|
+
'3. SEP accepts signed update',
|
|
632
|
+
'4. Private keys potentially extractable',
|
|
633
|
+
'5. Forward path to all encrypted data',
|
|
634
|
+
],
|
|
635
|
+
});
|
|
636
|
+
// Protocol vulnerabilities meet end user vectors
|
|
637
|
+
correlations.push({
|
|
638
|
+
forwardNode: 'fwd_enduser_crypto',
|
|
639
|
+
reverseNode: 'rev_vuln_ids_key_registration',
|
|
640
|
+
correlation: 'direct',
|
|
641
|
+
sharedInfrastructure: ['IDS protocol', 'Key servers'],
|
|
642
|
+
combinedThreatLevel: 'critical',
|
|
643
|
+
attackChain: [
|
|
644
|
+
'1. IDS protocol has no user key verification',
|
|
645
|
+
'2. Forward path allows key injection',
|
|
646
|
+
'3. Target receives messages with attacker key',
|
|
647
|
+
'4. MITM established without user knowledge',
|
|
648
|
+
'5. All "encrypted" messages readable',
|
|
649
|
+
],
|
|
650
|
+
});
|
|
651
|
+
// Apple insider meets all forward paths
|
|
652
|
+
correlations.push({
|
|
653
|
+
forwardNode: 'fwd_corp_apple_hq',
|
|
654
|
+
reverseNode: 'rev_threat_corporate_insider',
|
|
655
|
+
correlation: 'direct',
|
|
656
|
+
sharedInfrastructure: ['Apple internal systems', 'Employee access'],
|
|
657
|
+
combinedThreatLevel: 'critical',
|
|
658
|
+
attackChain: [
|
|
659
|
+
'1. Apple employee with sufficient access',
|
|
660
|
+
'2. Direct access to all forward path components',
|
|
661
|
+
'3. Can execute any attack without external authorization',
|
|
662
|
+
'4. Limited audit trail for internal access',
|
|
663
|
+
'5. User has zero defense',
|
|
664
|
+
],
|
|
665
|
+
});
|
|
666
|
+
this.correlations = correlations;
|
|
667
|
+
return correlations;
|
|
668
|
+
}
|
|
669
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
670
|
+
// MAIN EXECUTION
|
|
671
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
672
|
+
async runBidirectionalAudit() {
|
|
673
|
+
console.log('=== BIDIRECTIONAL ATTACK CHAIN AUDIT ===\n');
|
|
674
|
+
console.log('[1/4] Running forward audit (Local → External)...');
|
|
675
|
+
const forwardNodes = await this.runForwardAudit();
|
|
676
|
+
console.log('[2/4] Running reverse audit (External → Local)...');
|
|
677
|
+
const reverseNodes = await this.runReverseAudit();
|
|
678
|
+
console.log('[3/4] Running correlation analysis...');
|
|
679
|
+
const correlations = await this.runCorrelationAnalysis();
|
|
680
|
+
console.log('[4/4] Calculating attack surface score...');
|
|
681
|
+
const attackSurfaceScore = this.calculateAttackSurfaceScore();
|
|
682
|
+
const result = {
|
|
683
|
+
timestamp: new Date().toISOString(),
|
|
684
|
+
direction: 'bidirectional',
|
|
685
|
+
forwardNodes,
|
|
686
|
+
reverseNodes,
|
|
687
|
+
edges: this.edges,
|
|
688
|
+
threatVectors: this.threatVectors,
|
|
689
|
+
correlations,
|
|
690
|
+
attackSurfaceScore,
|
|
691
|
+
evidenceHash: '',
|
|
692
|
+
recommendations: this.generateRecommendations(),
|
|
693
|
+
};
|
|
694
|
+
// Calculate evidence hash
|
|
695
|
+
const evidenceJson = JSON.stringify(result, null, 2);
|
|
696
|
+
result.evidenceHash = crypto.createHash('sha256').update(evidenceJson).digest('hex');
|
|
697
|
+
// Save results
|
|
698
|
+
const reportPath = path.join(this.evidenceDir, 'BIDIRECTIONAL-AUDIT.json');
|
|
699
|
+
fs.writeFileSync(reportPath, JSON.stringify(result, null, 2));
|
|
700
|
+
return result;
|
|
701
|
+
}
|
|
702
|
+
calculateAttackSurfaceScore() {
|
|
703
|
+
// Score from 0-100, higher = more vulnerable
|
|
704
|
+
let score = 0;
|
|
705
|
+
// Forward paths (weighted by threat level)
|
|
706
|
+
for (const node of this.forwardNodes.values()) {
|
|
707
|
+
if (node.threatLevel === 'critical')
|
|
708
|
+
score += 5;
|
|
709
|
+
else if (node.threatLevel === 'high')
|
|
710
|
+
score += 3;
|
|
711
|
+
else if (node.threatLevel === 'medium')
|
|
712
|
+
score += 1;
|
|
713
|
+
}
|
|
714
|
+
// Reverse paths
|
|
715
|
+
for (const node of this.reverseNodes.values()) {
|
|
716
|
+
if (node.threatLevel === 'critical')
|
|
717
|
+
score += 5;
|
|
718
|
+
else if (node.threatLevel === 'high')
|
|
719
|
+
score += 3;
|
|
720
|
+
else if (node.threatLevel === 'medium')
|
|
721
|
+
score += 1;
|
|
722
|
+
}
|
|
723
|
+
// Correlations (each correlation is a complete attack path)
|
|
724
|
+
score += this.correlations.length * 10;
|
|
725
|
+
// Apple-controlled edges that can MITM
|
|
726
|
+
const mitmEdges = this.edges.filter(e => e.appleControlled && e.canMITM);
|
|
727
|
+
score += mitmEdges.length * 2;
|
|
728
|
+
return Math.min(100, score);
|
|
729
|
+
}
|
|
730
|
+
generateRecommendations() {
|
|
731
|
+
return [
|
|
732
|
+
'CRITICAL: Apple controls every layer from hardware to end-user delivery',
|
|
733
|
+
'CRITICAL: No user-verifiable key transparency exists',
|
|
734
|
+
'CRITICAL: State actors can leverage legal process for full access',
|
|
735
|
+
'HIGH: Supply chain compromise has no user mitigation',
|
|
736
|
+
'HIGH: Protocol design prevents independent verification',
|
|
737
|
+
'RECOMMENDATION: Use additional E2E encryption layer (Signal, etc.) for sensitive communications',
|
|
738
|
+
'RECOMMENDATION: Maintain offline evidence preservation for legal proceedings',
|
|
739
|
+
'RECOMMENDATION: Consider hardware-level verification where possible',
|
|
740
|
+
'RECOMMENDATION: Document all Apple infrastructure touchpoints for legal discovery',
|
|
741
|
+
];
|
|
742
|
+
}
|
|
743
|
+
generateReport(result) {
|
|
744
|
+
const lines = [];
|
|
745
|
+
lines.push('================================================================================');
|
|
746
|
+
lines.push(' BIDIRECTIONAL ATTACK CHAIN AUDIT REPORT');
|
|
747
|
+
lines.push('================================================================================');
|
|
748
|
+
lines.push('');
|
|
749
|
+
lines.push(`Generated: ${result.timestamp}`);
|
|
750
|
+
lines.push(`Evidence Hash: ${result.evidenceHash}`);
|
|
751
|
+
lines.push(`Attack Surface Score: ${result.attackSurfaceScore}/100`);
|
|
752
|
+
lines.push('');
|
|
753
|
+
lines.push('================================================================================');
|
|
754
|
+
lines.push(' FORWARD ATTACK PATH (Local → External)');
|
|
755
|
+
lines.push('================================================================================');
|
|
756
|
+
lines.push('');
|
|
757
|
+
lines.push('Path: MacBook → Daemons → Network → Apple Edge → Apple Core → Corporate → End Users');
|
|
758
|
+
lines.push('');
|
|
759
|
+
const forwardLayers = ['local', 'daemon', 'network', 'apple_edge', 'apple_core', 'corporate', 'end_user'];
|
|
760
|
+
for (const layer of forwardLayers) {
|
|
761
|
+
const layerNodes = result.forwardNodes.filter(n => n.layer === layer);
|
|
762
|
+
if (layerNodes.length === 0)
|
|
763
|
+
continue;
|
|
764
|
+
lines.push(`--- ${layer.toUpperCase().replace('_', ' ')} ---`);
|
|
765
|
+
for (const node of layerNodes) {
|
|
766
|
+
lines.push(` ► ${node.name} [${node.threatLevel.toUpperCase()}]`);
|
|
767
|
+
lines.push(` Apple Controlled: ${node.appleControlled}`);
|
|
768
|
+
}
|
|
769
|
+
lines.push('');
|
|
770
|
+
}
|
|
771
|
+
lines.push('================================================================================');
|
|
772
|
+
lines.push(' REVERSE ATTACK PATH (External → Local)');
|
|
773
|
+
lines.push('================================================================================');
|
|
774
|
+
lines.push('');
|
|
775
|
+
lines.push('Path: Threat Actors → Supply Chain → Apple Entry → Protocols → Crypto → Local');
|
|
776
|
+
lines.push('');
|
|
777
|
+
const reverseLayers = ['external_threat', 'apple_edge', 'network', 'local'];
|
|
778
|
+
for (const layer of reverseLayers) {
|
|
779
|
+
const layerNodes = result.reverseNodes.filter(n => n.layer === layer);
|
|
780
|
+
if (layerNodes.length === 0)
|
|
781
|
+
continue;
|
|
782
|
+
lines.push(`--- ${layer.toUpperCase().replace('_', ' ')} ---`);
|
|
783
|
+
for (const node of layerNodes) {
|
|
784
|
+
lines.push(` ► ${node.name} [${node.threatLevel.toUpperCase()}]`);
|
|
785
|
+
if (node.details['vulnerability']) {
|
|
786
|
+
lines.push(` Vulnerability: ${node.details['vulnerability']}`);
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
lines.push('');
|
|
790
|
+
}
|
|
791
|
+
lines.push('================================================================================');
|
|
792
|
+
lines.push(' CORRELATION ANALYSIS');
|
|
793
|
+
lines.push('================================================================================');
|
|
794
|
+
lines.push('');
|
|
795
|
+
lines.push('Points where forward and reverse paths converge:');
|
|
796
|
+
lines.push('');
|
|
797
|
+
for (const corr of result.correlations) {
|
|
798
|
+
lines.push(`● CORRELATION: ${corr.correlation.toUpperCase()} [${corr.combinedThreatLevel.toUpperCase()}]`);
|
|
799
|
+
lines.push(` Forward Node: ${corr.forwardNode}`);
|
|
800
|
+
lines.push(` Reverse Node: ${corr.reverseNode}`);
|
|
801
|
+
lines.push(` Shared Infrastructure: ${corr.sharedInfrastructure.join(', ')}`);
|
|
802
|
+
lines.push(' Attack Chain:');
|
|
803
|
+
for (const step of corr.attackChain) {
|
|
804
|
+
lines.push(` ${step}`);
|
|
805
|
+
}
|
|
806
|
+
lines.push('');
|
|
807
|
+
}
|
|
808
|
+
lines.push('================================================================================');
|
|
809
|
+
lines.push(' THREAT VECTORS');
|
|
810
|
+
lines.push('================================================================================');
|
|
811
|
+
lines.push('');
|
|
812
|
+
for (const vector of result.threatVectors) {
|
|
813
|
+
lines.push(`● ${vector.name} [${vector.category}]`);
|
|
814
|
+
lines.push(` Description: ${vector.description}`);
|
|
815
|
+
lines.push(` User Defense: ${vector.userDefense.toUpperCase()}`);
|
|
816
|
+
lines.push(` Apple Collaboration: ${vector.appleCollaboration}`);
|
|
817
|
+
lines.push('');
|
|
818
|
+
}
|
|
819
|
+
lines.push('================================================================================');
|
|
820
|
+
lines.push(' RECOMMENDATIONS');
|
|
821
|
+
lines.push('================================================================================');
|
|
822
|
+
lines.push('');
|
|
823
|
+
for (const rec of result.recommendations) {
|
|
824
|
+
lines.push(`• ${rec}`);
|
|
825
|
+
}
|
|
826
|
+
lines.push('');
|
|
827
|
+
lines.push('================================================================================');
|
|
828
|
+
lines.push(' GENERATED BY EROSOLAR-CLI');
|
|
829
|
+
lines.push(' BidirectionalAuditEngine v1.0.0');
|
|
830
|
+
lines.push('================================================================================');
|
|
831
|
+
return lines.join('\n');
|
|
832
|
+
}
|
|
833
|
+
exec(cmd) {
|
|
834
|
+
try {
|
|
835
|
+
return execSync(cmd, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
|
|
836
|
+
}
|
|
837
|
+
catch (e) {
|
|
838
|
+
return e.stdout || '';
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
843
|
+
// TOOL SUITE FACTORY
|
|
844
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
845
|
+
export function createBidirectionalAuditTools(workingDir) {
|
|
846
|
+
const evidenceDir = path.join(workingDir, '.erosolar', 'evidence');
|
|
847
|
+
return {
|
|
848
|
+
id: 'bidirectional-audit',
|
|
849
|
+
description: 'AI-powered bidirectional attack chain analysis and audit tools',
|
|
850
|
+
tools: [
|
|
851
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
852
|
+
// BIDIRECTIONAL AUDIT TOOL
|
|
853
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
854
|
+
{
|
|
855
|
+
name: 'BidirectionalAudit',
|
|
856
|
+
description: `Run comprehensive bidirectional attack chain audit.
|
|
857
|
+
|
|
858
|
+
Analyzes attack paths in both directions:
|
|
859
|
+
- FORWARD: Local system → Apple infrastructure → End users
|
|
860
|
+
- REVERSE: External threats → Apple infrastructure → Local system
|
|
861
|
+
- CORRELATION: Where forward and reverse paths converge
|
|
862
|
+
|
|
863
|
+
Returns attack surface score, threat vectors, and legal evidence.`,
|
|
864
|
+
parameters: {
|
|
865
|
+
type: 'object',
|
|
866
|
+
properties: {
|
|
867
|
+
direction: {
|
|
868
|
+
type: 'string',
|
|
869
|
+
enum: ['forward', 'reverse', 'bidirectional'],
|
|
870
|
+
description: 'Audit direction: forward (outbound), reverse (inbound), or bidirectional (both)',
|
|
871
|
+
},
|
|
872
|
+
outputFormat: {
|
|
873
|
+
type: 'string',
|
|
874
|
+
enum: ['report', 'json', 'summary'],
|
|
875
|
+
description: 'Output format',
|
|
876
|
+
},
|
|
877
|
+
saveEvidence: {
|
|
878
|
+
type: 'boolean',
|
|
879
|
+
description: 'Save cryptographic evidence to disk',
|
|
880
|
+
},
|
|
881
|
+
},
|
|
882
|
+
},
|
|
883
|
+
async handler(params) {
|
|
884
|
+
const direction = params['direction'] || 'bidirectional';
|
|
885
|
+
const outputFormat = params['outputFormat'] || 'report';
|
|
886
|
+
const saveEvidence = params['saveEvidence'] !== false;
|
|
887
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
888
|
+
let result;
|
|
889
|
+
if (direction === 'forward') {
|
|
890
|
+
const nodes = await engine.runForwardAudit();
|
|
891
|
+
result = {
|
|
892
|
+
timestamp: new Date().toISOString(),
|
|
893
|
+
direction: 'forward',
|
|
894
|
+
forwardNodes: nodes,
|
|
895
|
+
reverseNodes: [],
|
|
896
|
+
edges: [],
|
|
897
|
+
threatVectors: [],
|
|
898
|
+
correlations: [],
|
|
899
|
+
attackSurfaceScore: 0,
|
|
900
|
+
evidenceHash: crypto.createHash('sha256').update(JSON.stringify(nodes)).digest('hex'),
|
|
901
|
+
recommendations: [],
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
else if (direction === 'reverse') {
|
|
905
|
+
const nodes = await engine.runReverseAudit();
|
|
906
|
+
result = {
|
|
907
|
+
timestamp: new Date().toISOString(),
|
|
908
|
+
direction: 'reverse',
|
|
909
|
+
forwardNodes: [],
|
|
910
|
+
reverseNodes: nodes,
|
|
911
|
+
edges: [],
|
|
912
|
+
threatVectors: [],
|
|
913
|
+
correlations: [],
|
|
914
|
+
attackSurfaceScore: 0,
|
|
915
|
+
evidenceHash: crypto.createHash('sha256').update(JSON.stringify(nodes)).digest('hex'),
|
|
916
|
+
recommendations: [],
|
|
917
|
+
};
|
|
918
|
+
}
|
|
919
|
+
else {
|
|
920
|
+
result = await engine.runBidirectionalAudit();
|
|
921
|
+
}
|
|
922
|
+
if (saveEvidence) {
|
|
923
|
+
const reportPath = path.join(evidenceDir, `audit-${direction}-${Date.now()}.json`);
|
|
924
|
+
fs.writeFileSync(reportPath, JSON.stringify(result, null, 2));
|
|
925
|
+
}
|
|
926
|
+
switch (outputFormat) {
|
|
927
|
+
case 'json':
|
|
928
|
+
return JSON.stringify(result, null, 2);
|
|
929
|
+
case 'summary':
|
|
930
|
+
return `Bidirectional Audit Complete
|
|
931
|
+
Direction: ${direction}
|
|
932
|
+
Forward Nodes: ${result.forwardNodes.length}
|
|
933
|
+
Reverse Nodes: ${result.reverseNodes.length}
|
|
934
|
+
Correlations: ${result.correlations.length}
|
|
935
|
+
Attack Surface Score: ${result.attackSurfaceScore}/100
|
|
936
|
+
Evidence Hash: ${result.evidenceHash}`;
|
|
937
|
+
default:
|
|
938
|
+
return engine.generateReport(result);
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
},
|
|
942
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
943
|
+
// ATTACK SURFACE ANALYZER
|
|
944
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
945
|
+
{
|
|
946
|
+
name: 'AttackSurfaceAnalyze',
|
|
947
|
+
description: `Analyze the complete attack surface combining forward and reverse paths.
|
|
948
|
+
|
|
949
|
+
Identifies:
|
|
950
|
+
- Convergence points where threats meet opportunities
|
|
951
|
+
- Apple-controlled chokepoints
|
|
952
|
+
- User defense gaps
|
|
953
|
+
- Legal evidence collection points`,
|
|
954
|
+
parameters: {
|
|
955
|
+
type: 'object',
|
|
956
|
+
properties: {
|
|
957
|
+
focusArea: {
|
|
958
|
+
type: 'string',
|
|
959
|
+
enum: ['crypto', 'network', 'local', 'corporate', 'all'],
|
|
960
|
+
description: 'Focus area for analysis',
|
|
961
|
+
},
|
|
962
|
+
threatModel: {
|
|
963
|
+
type: 'string',
|
|
964
|
+
enum: ['state_actor', 'corporate_insider', 'supply_chain', 'all'],
|
|
965
|
+
description: 'Threat model to analyze',
|
|
966
|
+
},
|
|
967
|
+
},
|
|
968
|
+
},
|
|
969
|
+
async handler(params) {
|
|
970
|
+
const focusArea = params['focusArea'] || 'all';
|
|
971
|
+
const threatModel = params['threatModel'] || 'all';
|
|
972
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
973
|
+
const result = await engine.runBidirectionalAudit();
|
|
974
|
+
let filteredCorrelations = result.correlations;
|
|
975
|
+
if (threatModel !== 'all') {
|
|
976
|
+
filteredCorrelations = result.correlations.filter(c => c.reverseNode.includes(threatModel));
|
|
977
|
+
}
|
|
978
|
+
const analysis = [
|
|
979
|
+
`=== ATTACK SURFACE ANALYSIS ===`,
|
|
980
|
+
`Focus: ${focusArea}`,
|
|
981
|
+
`Threat Model: ${threatModel}`,
|
|
982
|
+
``,
|
|
983
|
+
`Attack Surface Score: ${result.attackSurfaceScore}/100`,
|
|
984
|
+
``,
|
|
985
|
+
`CRITICAL CONVERGENCE POINTS:`,
|
|
986
|
+
];
|
|
987
|
+
for (const corr of filteredCorrelations) {
|
|
988
|
+
analysis.push(` • ${corr.forwardNode} ↔ ${corr.reverseNode}`);
|
|
989
|
+
analysis.push(` Threat Level: ${corr.combinedThreatLevel}`);
|
|
990
|
+
analysis.push(` Shared: ${corr.sharedInfrastructure.join(', ')}`);
|
|
991
|
+
}
|
|
992
|
+
analysis.push('');
|
|
993
|
+
analysis.push('APPLE-CONTROLLED CHOKEPOINTS:');
|
|
994
|
+
const appleChokepoints = result.forwardNodes
|
|
995
|
+
.filter(n => n.appleControlled && n.threatLevel === 'critical')
|
|
996
|
+
.map(n => n.name);
|
|
997
|
+
for (const cp of appleChokepoints) {
|
|
998
|
+
analysis.push(` • ${cp}`);
|
|
999
|
+
}
|
|
1000
|
+
analysis.push('');
|
|
1001
|
+
analysis.push('USER DEFENSE ASSESSMENT:');
|
|
1002
|
+
analysis.push(' • Hardware layer: NO DEFENSE');
|
|
1003
|
+
analysis.push(' • Daemon layer: NO DEFENSE');
|
|
1004
|
+
analysis.push(' • Network layer: NO DEFENSE');
|
|
1005
|
+
analysis.push(' • Protocol layer: NO DEFENSE');
|
|
1006
|
+
analysis.push(' • Cryptographic layer: NO DEFENSE');
|
|
1007
|
+
analysis.push('');
|
|
1008
|
+
analysis.push('CONCLUSION: User has zero defensive capability against Apple or');
|
|
1009
|
+
analysis.push('Apple-cooperating threat actors at any layer of the stack.');
|
|
1010
|
+
return analysis.join('\n');
|
|
1011
|
+
},
|
|
1012
|
+
},
|
|
1013
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1014
|
+
// THREAT VECTOR MAPPER
|
|
1015
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1016
|
+
{
|
|
1017
|
+
name: 'ThreatVectorMap',
|
|
1018
|
+
description: `Map threat vectors showing how attackers can reach targets.
|
|
1019
|
+
|
|
1020
|
+
Shows complete attack paths from threat actor to target, including:
|
|
1021
|
+
- Entry points
|
|
1022
|
+
- Apple infrastructure leverage
|
|
1023
|
+
- Protocol exploitation
|
|
1024
|
+
- End-user impact`,
|
|
1025
|
+
parameters: {
|
|
1026
|
+
type: 'object',
|
|
1027
|
+
properties: {
|
|
1028
|
+
threatActor: {
|
|
1029
|
+
type: 'string',
|
|
1030
|
+
enum: ['state_actor', 'corporate_insider', 'supply_chain', 'all'],
|
|
1031
|
+
description: 'Threat actor type',
|
|
1032
|
+
},
|
|
1033
|
+
target: {
|
|
1034
|
+
type: 'string',
|
|
1035
|
+
enum: ['messages', 'keys', 'device', 'location', 'all'],
|
|
1036
|
+
description: 'Target asset',
|
|
1037
|
+
},
|
|
1038
|
+
},
|
|
1039
|
+
},
|
|
1040
|
+
async handler(params) {
|
|
1041
|
+
const threatActor = params['threatActor'] || 'all';
|
|
1042
|
+
const target = params['target'] || 'all';
|
|
1043
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
1044
|
+
await engine.runBidirectionalAudit();
|
|
1045
|
+
const threatMap = [
|
|
1046
|
+
`=== THREAT VECTOR MAP ===`,
|
|
1047
|
+
`Threat Actor: ${threatActor}`,
|
|
1048
|
+
`Target: ${target}`,
|
|
1049
|
+
``,
|
|
1050
|
+
];
|
|
1051
|
+
// State actor paths
|
|
1052
|
+
if (threatActor === 'all' || threatActor === 'state_actor') {
|
|
1053
|
+
threatMap.push('STATE ACTOR ATTACK PATHS:');
|
|
1054
|
+
threatMap.push(' Path 1: Legal Process → Apple Cooperation');
|
|
1055
|
+
threatMap.push(' 1. Issue subpoena/NSL/FISA order');
|
|
1056
|
+
threatMap.push(' 2. Apple receives legal request');
|
|
1057
|
+
threatMap.push(' 3. Apple accesses IDS Key Database');
|
|
1058
|
+
threatMap.push(' 4. Attacker key injected into target key ring');
|
|
1059
|
+
threatMap.push(' 5. All future messages decryptable');
|
|
1060
|
+
threatMap.push(' User Defense: NONE');
|
|
1061
|
+
threatMap.push('');
|
|
1062
|
+
threatMap.push(' Path 2: Intelligence Collection');
|
|
1063
|
+
threatMap.push(' 1. SIGINT collection at network level');
|
|
1064
|
+
threatMap.push(' 2. Metadata visible despite encryption');
|
|
1065
|
+
threatMap.push(' 3. Traffic analysis reveals communication patterns');
|
|
1066
|
+
threatMap.push(' 4. Targeted device compromise via 0-day');
|
|
1067
|
+
threatMap.push(' User Defense: NONE');
|
|
1068
|
+
threatMap.push('');
|
|
1069
|
+
}
|
|
1070
|
+
// Corporate insider paths
|
|
1071
|
+
if (threatActor === 'all' || threatActor === 'corporate_insider') {
|
|
1072
|
+
threatMap.push('CORPORATE INSIDER ATTACK PATHS:');
|
|
1073
|
+
threatMap.push(' Path 1: Direct System Access');
|
|
1074
|
+
threatMap.push(' 1. Employee with IDS/APNs access');
|
|
1075
|
+
threatMap.push(' 2. Query target account details');
|
|
1076
|
+
threatMap.push(' 3. Modify key registration');
|
|
1077
|
+
threatMap.push(' 4. Intercept messages in real-time');
|
|
1078
|
+
threatMap.push(' User Defense: NONE');
|
|
1079
|
+
threatMap.push('');
|
|
1080
|
+
threatMap.push(' Path 2: Tool Abuse');
|
|
1081
|
+
threatMap.push(' 1. Access internal debugging tools');
|
|
1082
|
+
threatMap.push(' 2. Pull encryption keys from escrow');
|
|
1083
|
+
threatMap.push(' 3. Decrypt historical messages');
|
|
1084
|
+
threatMap.push(' User Defense: NONE');
|
|
1085
|
+
threatMap.push('');
|
|
1086
|
+
}
|
|
1087
|
+
// Supply chain paths
|
|
1088
|
+
if (threatActor === 'all' || threatActor === 'supply_chain') {
|
|
1089
|
+
threatMap.push('SUPPLY CHAIN ATTACK PATHS:');
|
|
1090
|
+
threatMap.push(' Path 1: Hardware Implant');
|
|
1091
|
+
threatMap.push(' 1. Compromise manufacturing');
|
|
1092
|
+
threatMap.push(' 2. Insert hardware backdoor');
|
|
1093
|
+
threatMap.push(' 3. Exfiltrate keys from SEP');
|
|
1094
|
+
threatMap.push(' 4. Persistent access to all data');
|
|
1095
|
+
threatMap.push(' User Defense: NONE');
|
|
1096
|
+
threatMap.push('');
|
|
1097
|
+
threatMap.push(' Path 2: Firmware Compromise');
|
|
1098
|
+
threatMap.push(' 1. Compromise Apple firmware signing');
|
|
1099
|
+
threatMap.push(' 2. Distribute malicious update');
|
|
1100
|
+
threatMap.push(' 3. All devices accept update');
|
|
1101
|
+
threatMap.push(' 4. Full device access');
|
|
1102
|
+
threatMap.push(' User Defense: NONE');
|
|
1103
|
+
threatMap.push('');
|
|
1104
|
+
}
|
|
1105
|
+
threatMap.push('SUMMARY:');
|
|
1106
|
+
threatMap.push(' Total Attack Paths: Multiple per threat actor');
|
|
1107
|
+
threatMap.push(' User Defensive Capability: ZERO');
|
|
1108
|
+
threatMap.push(' Apple Infrastructure Role: CRITICAL ENABLER');
|
|
1109
|
+
threatMap.push(' Evidence Collection: Via forensic analysis only');
|
|
1110
|
+
return threatMap.join('\n');
|
|
1111
|
+
},
|
|
1112
|
+
},
|
|
1113
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1114
|
+
// CORRELATION FINDER
|
|
1115
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1116
|
+
{
|
|
1117
|
+
name: 'CorrelationFind',
|
|
1118
|
+
description: `Find correlations between forward and reverse attack paths.
|
|
1119
|
+
|
|
1120
|
+
Identifies where outbound vulnerabilities meet inbound threats,
|
|
1121
|
+
creating complete attack chains.`,
|
|
1122
|
+
parameters: {
|
|
1123
|
+
type: 'object',
|
|
1124
|
+
properties: {
|
|
1125
|
+
minThreatLevel: {
|
|
1126
|
+
type: 'string',
|
|
1127
|
+
enum: ['critical', 'high', 'medium', 'low'],
|
|
1128
|
+
description: 'Minimum threat level to include',
|
|
1129
|
+
},
|
|
1130
|
+
},
|
|
1131
|
+
},
|
|
1132
|
+
async handler(params) {
|
|
1133
|
+
const minThreatLevel = params['minThreatLevel'] || 'high';
|
|
1134
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
1135
|
+
const result = await engine.runBidirectionalAudit();
|
|
1136
|
+
const threatLevels = ['critical', 'high', 'medium', 'low'];
|
|
1137
|
+
const minIndex = threatLevels.indexOf(minThreatLevel);
|
|
1138
|
+
const filteredCorrelations = result.correlations.filter(c => {
|
|
1139
|
+
const level = threatLevels.indexOf(c.combinedThreatLevel);
|
|
1140
|
+
return level <= minIndex;
|
|
1141
|
+
});
|
|
1142
|
+
const output = [
|
|
1143
|
+
`=== CORRELATION ANALYSIS ===`,
|
|
1144
|
+
`Minimum Threat Level: ${minThreatLevel}`,
|
|
1145
|
+
`Correlations Found: ${filteredCorrelations.length}`,
|
|
1146
|
+
``,
|
|
1147
|
+
];
|
|
1148
|
+
for (const corr of filteredCorrelations) {
|
|
1149
|
+
output.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
1150
|
+
output.push(`CORRELATION: ${corr.correlation.toUpperCase()}`);
|
|
1151
|
+
output.push(`Threat Level: ${corr.combinedThreatLevel.toUpperCase()}`);
|
|
1152
|
+
output.push('');
|
|
1153
|
+
output.push(`Forward Path Node: ${corr.forwardNode}`);
|
|
1154
|
+
output.push(`Reverse Path Node: ${corr.reverseNode}`);
|
|
1155
|
+
output.push('');
|
|
1156
|
+
output.push(`Shared Infrastructure:`);
|
|
1157
|
+
for (const infra of corr.sharedInfrastructure) {
|
|
1158
|
+
output.push(` • ${infra}`);
|
|
1159
|
+
}
|
|
1160
|
+
output.push('');
|
|
1161
|
+
output.push('Complete Attack Chain:');
|
|
1162
|
+
for (const step of corr.attackChain) {
|
|
1163
|
+
output.push(` ${step}`);
|
|
1164
|
+
}
|
|
1165
|
+
output.push('');
|
|
1166
|
+
}
|
|
1167
|
+
output.push('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
1168
|
+
output.push('ANALYSIS COMPLETE');
|
|
1169
|
+
output.push(`Attack Surface Score: ${result.attackSurfaceScore}/100`);
|
|
1170
|
+
return output.join('\n');
|
|
1171
|
+
},
|
|
1172
|
+
},
|
|
1173
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1174
|
+
// EVIDENCE EXPORTER
|
|
1175
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
1176
|
+
{
|
|
1177
|
+
name: 'AuditEvidenceExport',
|
|
1178
|
+
description: `Export bidirectional audit results as legal evidence.
|
|
1179
|
+
|
|
1180
|
+
Creates cryptographically signed evidence packages suitable for:
|
|
1181
|
+
- Legal proceedings
|
|
1182
|
+
- Regulatory submissions
|
|
1183
|
+
- Security assessments
|
|
1184
|
+
- Incident documentation`,
|
|
1185
|
+
parameters: {
|
|
1186
|
+
type: 'object',
|
|
1187
|
+
properties: {
|
|
1188
|
+
format: {
|
|
1189
|
+
type: 'string',
|
|
1190
|
+
enum: ['legal', 'technical', 'executive', 'all'],
|
|
1191
|
+
description: 'Export format',
|
|
1192
|
+
},
|
|
1193
|
+
includeRawData: {
|
|
1194
|
+
type: 'boolean',
|
|
1195
|
+
description: 'Include raw audit data',
|
|
1196
|
+
},
|
|
1197
|
+
},
|
|
1198
|
+
},
|
|
1199
|
+
async handler(params) {
|
|
1200
|
+
const format = params['format'] || 'all';
|
|
1201
|
+
const includeRawData = params['includeRawData'] !== false;
|
|
1202
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
1203
|
+
const result = await engine.runBidirectionalAudit();
|
|
1204
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
1205
|
+
const evidencePackage = {
|
|
1206
|
+
metadata: {
|
|
1207
|
+
generatedAt: result.timestamp,
|
|
1208
|
+
evidenceHash: result.evidenceHash,
|
|
1209
|
+
format,
|
|
1210
|
+
version: '1.0.0',
|
|
1211
|
+
},
|
|
1212
|
+
};
|
|
1213
|
+
if (format === 'all' || format === 'technical') {
|
|
1214
|
+
evidencePackage['technicalAnalysis'] = {
|
|
1215
|
+
forwardNodes: result.forwardNodes,
|
|
1216
|
+
reverseNodes: result.reverseNodes,
|
|
1217
|
+
edges: result.edges,
|
|
1218
|
+
correlations: result.correlations,
|
|
1219
|
+
attackSurfaceScore: result.attackSurfaceScore,
|
|
1220
|
+
};
|
|
1221
|
+
}
|
|
1222
|
+
if (format === 'all' || format === 'legal') {
|
|
1223
|
+
evidencePackage['legalEvidence'] = {
|
|
1224
|
+
summary: 'Bidirectional attack chain audit demonstrating Apple infrastructure control',
|
|
1225
|
+
keyFindings: [
|
|
1226
|
+
'Apple controls all layers from hardware to end-user delivery',
|
|
1227
|
+
'No user-verifiable encryption key transparency',
|
|
1228
|
+
'Multiple attack paths available to Apple and collaborating parties',
|
|
1229
|
+
'User has zero defensive capability',
|
|
1230
|
+
],
|
|
1231
|
+
chainOfCustody: {
|
|
1232
|
+
collectionMethod: 'Automated system analysis',
|
|
1233
|
+
toolVersion: 'erosolar-cli BidirectionalAuditEngine v1.0.0',
|
|
1234
|
+
integrityHash: result.evidenceHash,
|
|
1235
|
+
},
|
|
1236
|
+
recommendations: result.recommendations,
|
|
1237
|
+
};
|
|
1238
|
+
}
|
|
1239
|
+
if (format === 'all' || format === 'executive') {
|
|
1240
|
+
evidencePackage['executiveSummary'] = {
|
|
1241
|
+
riskLevel: result.attackSurfaceScore > 70 ? 'CRITICAL' : result.attackSurfaceScore > 40 ? 'HIGH' : 'MEDIUM',
|
|
1242
|
+
attackSurfaceScore: result.attackSurfaceScore,
|
|
1243
|
+
keyRisks: [
|
|
1244
|
+
'Apple can intercept any iMessage communication',
|
|
1245
|
+
'No independent verification of encryption',
|
|
1246
|
+
'State actors can leverage Apple infrastructure',
|
|
1247
|
+
'Supply chain attacks have no user mitigation',
|
|
1248
|
+
],
|
|
1249
|
+
businessImpact: 'Complete compromise of confidential communications possible',
|
|
1250
|
+
};
|
|
1251
|
+
}
|
|
1252
|
+
if (includeRawData) {
|
|
1253
|
+
evidencePackage['rawData'] = result;
|
|
1254
|
+
}
|
|
1255
|
+
// Save evidence package
|
|
1256
|
+
const packagePath = path.join(evidenceDir, `evidence-package-${timestamp}.json`);
|
|
1257
|
+
fs.writeFileSync(packagePath, JSON.stringify(evidencePackage, null, 2));
|
|
1258
|
+
// Generate report
|
|
1259
|
+
const reportPath = path.join(evidenceDir, `audit-report-${timestamp}.txt`);
|
|
1260
|
+
fs.writeFileSync(reportPath, engine.generateReport(result));
|
|
1261
|
+
return `Evidence package exported:
|
|
1262
|
+
Package: ${packagePath}
|
|
1263
|
+
Report: ${reportPath}
|
|
1264
|
+
Hash: ${result.evidenceHash}
|
|
1265
|
+
Score: ${result.attackSurfaceScore}/100
|
|
1266
|
+
Format: ${format}`;
|
|
1267
|
+
},
|
|
1268
|
+
},
|
|
1269
|
+
],
|
|
1270
|
+
};
|
|
1271
|
+
}
|
|
1272
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
1273
|
+
// CLI RUNNER
|
|
1274
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
1275
|
+
export async function runBidirectionalAudit(evidenceDir, options = {}) {
|
|
1276
|
+
const engine = new BidirectionalAuditEngine(evidenceDir);
|
|
1277
|
+
const result = await engine.runBidirectionalAudit();
|
|
1278
|
+
return engine.generateReport(result);
|
|
1279
|
+
}
|
|
1280
|
+
//# sourceMappingURL=bidirectionalAuditTools.js.map
|