secure-scan 1.2.2
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 +564 -0
- package/dist/ai/aiAnalyzer.d.ts +99 -0
- package/dist/ai/aiAnalyzer.d.ts.map +1 -0
- package/dist/ai/aiAnalyzer.js +669 -0
- package/dist/ai/aiAnalyzer.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +21 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/analyzers/base/baseAnalyzer.d.ts +44 -0
- package/dist/analyzers/base/baseAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/base/baseAnalyzer.js +53 -0
- package/dist/analyzers/base/baseAnalyzer.js.map +1 -0
- package/dist/analyzers/base/index.d.ts +5 -0
- package/dist/analyzers/base/index.d.ts.map +1 -0
- package/dist/analyzers/base/index.js +21 -0
- package/dist/analyzers/base/index.js.map +1 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.d.ts +60 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.js +218 -0
- package/dist/analyzers/c-cpp/cppAnalyzer.js.map +1 -0
- package/dist/analyzers/c-cpp/index.d.ts +5 -0
- package/dist/analyzers/c-cpp/index.d.ts.map +1 -0
- package/dist/analyzers/c-cpp/index.js +21 -0
- package/dist/analyzers/c-cpp/index.js.map +1 -0
- package/dist/analyzers/core/engine/index.d.ts +5 -0
- package/dist/analyzers/core/engine/index.d.ts.map +1 -0
- package/dist/analyzers/core/engine/index.js +21 -0
- package/dist/analyzers/core/engine/index.js.map +1 -0
- package/dist/analyzers/core/engine/ruleEngine.d.ts +46 -0
- package/dist/analyzers/core/engine/ruleEngine.d.ts.map +1 -0
- package/dist/analyzers/core/engine/ruleEngine.js +173 -0
- package/dist/analyzers/core/engine/ruleEngine.js.map +1 -0
- package/dist/analyzers/core/index.d.ts +8 -0
- package/dist/analyzers/core/index.d.ts.map +1 -0
- package/dist/analyzers/core/index.js +24 -0
- package/dist/analyzers/core/index.js.map +1 -0
- package/dist/analyzers/core/scanner/fileScanner.d.ts +31 -0
- package/dist/analyzers/core/scanner/fileScanner.d.ts.map +1 -0
- package/dist/analyzers/core/scanner/fileScanner.js +199 -0
- package/dist/analyzers/core/scanner/fileScanner.js.map +1 -0
- package/dist/analyzers/core/scanner/index.d.ts +5 -0
- package/dist/analyzers/core/scanner/index.d.ts.map +1 -0
- package/dist/analyzers/core/scanner/index.js +21 -0
- package/dist/analyzers/core/scanner/index.js.map +1 -0
- package/dist/analyzers/core/scoring/index.d.ts +5 -0
- package/dist/analyzers/core/scoring/index.d.ts.map +1 -0
- package/dist/analyzers/core/scoring/index.js +21 -0
- package/dist/analyzers/core/scoring/index.js.map +1 -0
- package/dist/analyzers/core/scoring/riskScoring.d.ts +49 -0
- package/dist/analyzers/core/scoring/riskScoring.d.ts.map +1 -0
- package/dist/analyzers/core/scoring/riskScoring.js +180 -0
- package/dist/analyzers/core/scoring/riskScoring.js.map +1 -0
- package/dist/analyzers/core/securityScanner.d.ts +47 -0
- package/dist/analyzers/core/securityScanner.d.ts.map +1 -0
- package/dist/analyzers/core/securityScanner.js +298 -0
- package/dist/analyzers/core/securityScanner.js.map +1 -0
- package/dist/analyzers/csharp/csharpAnalyzer.d.ts +64 -0
- package/dist/analyzers/csharp/csharpAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/csharp/csharpAnalyzer.js +232 -0
- package/dist/analyzers/csharp/csharpAnalyzer.js.map +1 -0
- package/dist/analyzers/csharp/index.d.ts +5 -0
- package/dist/analyzers/csharp/index.d.ts.map +1 -0
- package/dist/analyzers/csharp/index.js +21 -0
- package/dist/analyzers/csharp/index.js.map +1 -0
- package/dist/analyzers/iac/iacAnalyzer.d.ts +36 -0
- package/dist/analyzers/iac/iacAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/iac/iacAnalyzer.js +182 -0
- package/dist/analyzers/iac/iacAnalyzer.js.map +1 -0
- package/dist/analyzers/iac/index.d.ts +5 -0
- package/dist/analyzers/iac/index.d.ts.map +1 -0
- package/dist/analyzers/iac/index.js +21 -0
- package/dist/analyzers/iac/index.js.map +1 -0
- package/dist/analyzers/index.d.ts +30 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +80 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/java/index.d.ts +5 -0
- package/dist/analyzers/java/index.d.ts.map +1 -0
- package/dist/analyzers/java/index.js +21 -0
- package/dist/analyzers/java/index.js.map +1 -0
- package/dist/analyzers/java/javaAnalyzer.d.ts +64 -0
- package/dist/analyzers/java/javaAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/java/javaAnalyzer.js +224 -0
- package/dist/analyzers/java/javaAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/astUtils.d.ts +170 -0
- package/dist/analyzers/javascript/astUtils.d.ts.map +1 -0
- package/dist/analyzers/javascript/astUtils.js +700 -0
- package/dist/analyzers/javascript/astUtils.js.map +1 -0
- package/dist/analyzers/javascript/index.d.ts +18 -0
- package/dist/analyzers/javascript/index.d.ts.map +1 -0
- package/dist/analyzers/javascript/index.js +50 -0
- package/dist/analyzers/javascript/index.js.map +1 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.d.ts +111 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.js +860 -0
- package/dist/analyzers/javascript/javascriptAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/malwareDetector.d.ts +102 -0
- package/dist/analyzers/javascript/malwareDetector.d.ts.map +1 -0
- package/dist/analyzers/javascript/malwareDetector.js +616 -0
- package/dist/analyzers/javascript/malwareDetector.js.map +1 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts +87 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.js +553 -0
- package/dist/analyzers/javascript/packageJsonAnalyzer.js.map +1 -0
- package/dist/analyzers/javascript/taintAnalyzer.d.ts +120 -0
- package/dist/analyzers/javascript/taintAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/javascript/taintAnalyzer.js +526 -0
- package/dist/analyzers/javascript/taintAnalyzer.js.map +1 -0
- package/dist/analyzers/php/index.d.ts +5 -0
- package/dist/analyzers/php/index.d.ts.map +1 -0
- package/dist/analyzers/php/index.js +21 -0
- package/dist/analyzers/php/index.js.map +1 -0
- package/dist/analyzers/php/phpAnalyzer.d.ts +56 -0
- package/dist/analyzers/php/phpAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/php/phpAnalyzer.js +202 -0
- package/dist/analyzers/php/phpAnalyzer.js.map +1 -0
- package/dist/analyzers/python/index.d.ts +5 -0
- package/dist/analyzers/python/index.d.ts.map +1 -0
- package/dist/analyzers/python/index.js +21 -0
- package/dist/analyzers/python/index.js.map +1 -0
- package/dist/analyzers/python/pythonAnalyzer.d.ts +64 -0
- package/dist/analyzers/python/pythonAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/python/pythonAnalyzer.js +226 -0
- package/dist/analyzers/python/pythonAnalyzer.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +281 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/engine/index.d.ts +5 -0
- package/dist/core/engine/index.d.ts.map +1 -0
- package/dist/core/engine/index.js +21 -0
- package/dist/core/engine/index.js.map +1 -0
- package/dist/core/engine/ruleEngine.d.ts +46 -0
- package/dist/core/engine/ruleEngine.d.ts.map +1 -0
- package/dist/core/engine/ruleEngine.js +173 -0
- package/dist/core/engine/ruleEngine.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/scanner/fileScanner.d.ts +31 -0
- package/dist/core/scanner/fileScanner.d.ts.map +1 -0
- package/dist/core/scanner/fileScanner.js +199 -0
- package/dist/core/scanner/fileScanner.js.map +1 -0
- package/dist/core/scanner/index.d.ts +5 -0
- package/dist/core/scanner/index.d.ts.map +1 -0
- package/dist/core/scanner/index.js +21 -0
- package/dist/core/scanner/index.js.map +1 -0
- package/dist/core/scoring/index.d.ts +5 -0
- package/dist/core/scoring/index.d.ts.map +1 -0
- package/dist/core/scoring/index.js +21 -0
- package/dist/core/scoring/index.js.map +1 -0
- package/dist/core/scoring/riskScoring.d.ts +49 -0
- package/dist/core/scoring/riskScoring.d.ts.map +1 -0
- package/dist/core/scoring/riskScoring.js +180 -0
- package/dist/core/scoring/riskScoring.js.map +1 -0
- package/dist/core/securityScanner.d.ts +47 -0
- package/dist/core/securityScanner.d.ts.map +1 -0
- package/dist/core/securityScanner.js +298 -0
- package/dist/core/securityScanner.js.map +1 -0
- package/dist/dependencies/aiDependencyAnalyzer.d.ts +96 -0
- package/dist/dependencies/aiDependencyAnalyzer.d.ts.map +1 -0
- package/dist/dependencies/aiDependencyAnalyzer.js +435 -0
- package/dist/dependencies/aiDependencyAnalyzer.js.map +1 -0
- package/dist/dependencies/database/cveDatabase.d.ts +32 -0
- package/dist/dependencies/database/cveDatabase.d.ts.map +1 -0
- package/dist/dependencies/database/cveDatabase.js +393 -0
- package/dist/dependencies/database/cveDatabase.js.map +1 -0
- package/dist/dependencies/database/index.d.ts +6 -0
- package/dist/dependencies/database/index.d.ts.map +1 -0
- package/dist/dependencies/database/index.js +22 -0
- package/dist/dependencies/database/index.js.map +1 -0
- package/dist/dependencies/database/maliciousPackages.d.ts +43 -0
- package/dist/dependencies/database/maliciousPackages.d.ts.map +1 -0
- package/dist/dependencies/database/maliciousPackages.js +279 -0
- package/dist/dependencies/database/maliciousPackages.js.map +1 -0
- package/dist/dependencies/dependencyAnalyzer.d.ts +74 -0
- package/dist/dependencies/dependencyAnalyzer.d.ts.map +1 -0
- package/dist/dependencies/dependencyAnalyzer.js +349 -0
- package/dist/dependencies/dependencyAnalyzer.js.map +1 -0
- package/dist/dependencies/detectors/index.d.ts +7 -0
- package/dist/dependencies/detectors/index.d.ts.map +1 -0
- package/dist/dependencies/detectors/index.js +28 -0
- package/dist/dependencies/detectors/index.js.map +1 -0
- package/dist/dependencies/detectors/securityStandards.d.ts +15 -0
- package/dist/dependencies/detectors/securityStandards.d.ts.map +1 -0
- package/dist/dependencies/detectors/securityStandards.js +178 -0
- package/dist/dependencies/detectors/securityStandards.js.map +1 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.d.ts +53 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.d.ts.map +1 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.js +289 -0
- package/dist/dependencies/detectors/vulnerabilityDetector.js.map +1 -0
- package/dist/dependencies/index.d.ts +14 -0
- package/dist/dependencies/index.d.ts.map +1 -0
- package/dist/dependencies/index.js +43 -0
- package/dist/dependencies/index.js.map +1 -0
- package/dist/dependencies/installed/index.d.ts +8 -0
- package/dist/dependencies/installed/index.d.ts.map +1 -0
- package/dist/dependencies/installed/index.js +24 -0
- package/dist/dependencies/installed/index.js.map +1 -0
- package/dist/dependencies/installed/installedScanner.d.ts +91 -0
- package/dist/dependencies/installed/installedScanner.d.ts.map +1 -0
- package/dist/dependencies/installed/installedScanner.js +766 -0
- package/dist/dependencies/installed/installedScanner.js.map +1 -0
- package/dist/dependencies/installed/malwarePatterns.d.ts +32 -0
- package/dist/dependencies/installed/malwarePatterns.d.ts.map +1 -0
- package/dist/dependencies/installed/malwarePatterns.js +480 -0
- package/dist/dependencies/installed/malwarePatterns.js.map +1 -0
- package/dist/dependencies/installed/types.d.ts +274 -0
- package/dist/dependencies/installed/types.d.ts.map +1 -0
- package/dist/dependencies/installed/types.js +7 -0
- package/dist/dependencies/installed/types.js.map +1 -0
- package/dist/dependencies/parsers/base/baseParser.d.ts +44 -0
- package/dist/dependencies/parsers/base/baseParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/base/baseParser.js +80 -0
- package/dist/dependencies/parsers/base/baseParser.js.map +1 -0
- package/dist/dependencies/parsers/base/index.d.ts +6 -0
- package/dist/dependencies/parsers/base/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/base/index.js +27 -0
- package/dist/dependencies/parsers/base/index.js.map +1 -0
- package/dist/dependencies/parsers/cpp/cppParser.d.ts +36 -0
- package/dist/dependencies/parsers/cpp/cppParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/cpp/cppParser.js +196 -0
- package/dist/dependencies/parsers/cpp/cppParser.js.map +1 -0
- package/dist/dependencies/parsers/cpp/index.d.ts +6 -0
- package/dist/dependencies/parsers/cpp/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/cpp/index.js +27 -0
- package/dist/dependencies/parsers/cpp/index.js.map +1 -0
- package/dist/dependencies/parsers/csharp/csharpParser.d.ts +32 -0
- package/dist/dependencies/parsers/csharp/csharpParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/csharp/csharpParser.js +125 -0
- package/dist/dependencies/parsers/csharp/csharpParser.js.map +1 -0
- package/dist/dependencies/parsers/csharp/index.d.ts +6 -0
- package/dist/dependencies/parsers/csharp/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/csharp/index.js +27 -0
- package/dist/dependencies/parsers/csharp/index.js.map +1 -0
- package/dist/dependencies/parsers/index.d.ts +24 -0
- package/dist/dependencies/parsers/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/index.js +69 -0
- package/dist/dependencies/parsers/index.js.map +1 -0
- package/dist/dependencies/parsers/java/index.d.ts +6 -0
- package/dist/dependencies/parsers/java/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/java/index.js +27 -0
- package/dist/dependencies/parsers/java/index.js.map +1 -0
- package/dist/dependencies/parsers/java/javaParser.d.ts +32 -0
- package/dist/dependencies/parsers/java/javaParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/java/javaParser.js +168 -0
- package/dist/dependencies/parsers/java/javaParser.js.map +1 -0
- package/dist/dependencies/parsers/javascript/index.d.ts +6 -0
- package/dist/dependencies/parsers/javascript/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/javascript/index.js +27 -0
- package/dist/dependencies/parsers/javascript/index.js.map +1 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.d.ts +55 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.js +266 -0
- package/dist/dependencies/parsers/javascript/javascriptParser.js.map +1 -0
- package/dist/dependencies/parsers/php/index.d.ts +6 -0
- package/dist/dependencies/parsers/php/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/php/index.js +27 -0
- package/dist/dependencies/parsers/php/index.js.map +1 -0
- package/dist/dependencies/parsers/php/phpParser.d.ts +35 -0
- package/dist/dependencies/parsers/php/phpParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/php/phpParser.js +162 -0
- package/dist/dependencies/parsers/php/phpParser.js.map +1 -0
- package/dist/dependencies/parsers/python/index.d.ts +6 -0
- package/dist/dependencies/parsers/python/index.d.ts.map +1 -0
- package/dist/dependencies/parsers/python/index.js +27 -0
- package/dist/dependencies/parsers/python/index.js.map +1 -0
- package/dist/dependencies/parsers/python/pythonParser.d.ts +60 -0
- package/dist/dependencies/parsers/python/pythonParser.d.ts.map +1 -0
- package/dist/dependencies/parsers/python/pythonParser.js +336 -0
- package/dist/dependencies/parsers/python/pythonParser.js.map +1 -0
- package/dist/dependencies/types.d.ts +280 -0
- package/dist/dependencies/types.d.ts.map +1 -0
- package/dist/dependencies/types.js +59 -0
- package/dist/dependencies/types.js.map +1 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +18 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/translations.d.ts +55 -0
- package/dist/i18n/translations.d.ts.map +1 -0
- package/dist/i18n/translations.js +119 -0
- package/dist/i18n/translations.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/reports/dependencyReportGenerator.d.ts +20 -0
- package/dist/reports/dependencyReportGenerator.d.ts.map +1 -0
- package/dist/reports/dependencyReportGenerator.js +690 -0
- package/dist/reports/dependencyReportGenerator.js.map +1 -0
- package/dist/reports/htmlReportGenerator.d.ts +43 -0
- package/dist/reports/htmlReportGenerator.d.ts.map +1 -0
- package/dist/reports/htmlReportGenerator.js +793 -0
- package/dist/reports/htmlReportGenerator.js.map +1 -0
- package/dist/reports/index.d.ts +7 -0
- package/dist/reports/index.d.ts.map +1 -0
- package/dist/reports/index.js +23 -0
- package/dist/reports/index.js.map +1 -0
- package/dist/reports/installedDepsReportGenerator.d.ts +14 -0
- package/dist/reports/installedDepsReportGenerator.d.ts.map +1 -0
- package/dist/reports/installedDepsReportGenerator.js +872 -0
- package/dist/reports/installedDepsReportGenerator.js.map +1 -0
- package/dist/rules/index.d.ts +31 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +95 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/malware/categories/backdoors.d.ts +12 -0
- package/dist/rules/malware/categories/backdoors.d.ts.map +1 -0
- package/dist/rules/malware/categories/backdoors.js +163 -0
- package/dist/rules/malware/categories/backdoors.js.map +1 -0
- package/dist/rules/malware/categories/cryptominers.d.ts +13 -0
- package/dist/rules/malware/categories/cryptominers.d.ts.map +1 -0
- package/dist/rules/malware/categories/cryptominers.js +415 -0
- package/dist/rules/malware/categories/cryptominers.js.map +1 -0
- package/dist/rules/malware/categories/exfiltration.d.ts +20 -0
- package/dist/rules/malware/categories/exfiltration.d.ts.map +1 -0
- package/dist/rules/malware/categories/exfiltration.js +658 -0
- package/dist/rules/malware/categories/exfiltration.js.map +1 -0
- package/dist/rules/malware/categories/keyloggers.d.ts +19 -0
- package/dist/rules/malware/categories/keyloggers.d.ts.map +1 -0
- package/dist/rules/malware/categories/keyloggers.js +763 -0
- package/dist/rules/malware/categories/keyloggers.js.map +1 -0
- package/dist/rules/malware/categories/loaders.d.ts +20 -0
- package/dist/rules/malware/categories/loaders.d.ts.map +1 -0
- package/dist/rules/malware/categories/loaders.js +702 -0
- package/dist/rules/malware/categories/loaders.js.map +1 -0
- package/dist/rules/malware/categories/network.d.ts +19 -0
- package/dist/rules/malware/categories/network.d.ts.map +1 -0
- package/dist/rules/malware/categories/network.js +622 -0
- package/dist/rules/malware/categories/network.js.map +1 -0
- package/dist/rules/malware/categories/obfuscation.d.ts +22 -0
- package/dist/rules/malware/categories/obfuscation.d.ts.map +1 -0
- package/dist/rules/malware/categories/obfuscation.js +766 -0
- package/dist/rules/malware/categories/obfuscation.js.map +1 -0
- package/dist/rules/malware/constants/index.d.ts +281 -0
- package/dist/rules/malware/constants/index.d.ts.map +1 -0
- package/dist/rules/malware/constants/index.js +327 -0
- package/dist/rules/malware/constants/index.js.map +1 -0
- package/dist/rules/malware/engine/index.d.ts +178 -0
- package/dist/rules/malware/engine/index.d.ts.map +1 -0
- package/dist/rules/malware/engine/index.js +552 -0
- package/dist/rules/malware/engine/index.js.map +1 -0
- package/dist/rules/malware/index.d.ts +205 -0
- package/dist/rules/malware/index.d.ts.map +1 -0
- package/dist/rules/malware/index.js +837 -0
- package/dist/rules/malware/index.js.map +1 -0
- package/dist/rules/malware/scoring/index.d.ts +84 -0
- package/dist/rules/malware/scoring/index.d.ts.map +1 -0
- package/dist/rules/malware/scoring/index.js +441 -0
- package/dist/rules/malware/scoring/index.js.map +1 -0
- package/dist/rules/malware/types/index.d.ts +616 -0
- package/dist/rules/malware/types/index.d.ts.map +1 -0
- package/dist/rules/malware/types/index.js +155 -0
- package/dist/rules/malware/types/index.js.map +1 -0
- package/dist/rules/malware/utils/index.d.ts +117 -0
- package/dist/rules/malware/utils/index.d.ts.map +1 -0
- package/dist/rules/malware/utils/index.js +514 -0
- package/dist/rules/malware/utils/index.js.map +1 -0
- package/dist/rules/standards.d.ts +26 -0
- package/dist/rules/standards.d.ts.map +1 -0
- package/dist/rules/standards.js +352 -0
- package/dist/rules/standards.js.map +1 -0
- package/dist/rules/vulnerabilities/constants/index.d.ts +835 -0
- package/dist/rules/vulnerabilities/constants/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/constants/index.js +544 -0
- package/dist/rules/vulnerabilities/constants/index.js.map +1 -0
- package/dist/rules/vulnerabilities/engine/index.d.ts +145 -0
- package/dist/rules/vulnerabilities/engine/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/engine/index.js +581 -0
- package/dist/rules/vulnerabilities/engine/index.js.map +1 -0
- package/dist/rules/vulnerabilities/index.d.ts +148 -0
- package/dist/rules/vulnerabilities/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/index.js +252 -0
- package/dist/rules/vulnerabilities/index.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/authentication.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/authentication.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/authentication.js +419 -0
- package/dist/rules/vulnerabilities/rules/authentication.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.js +300 -0
- package/dist/rules/vulnerabilities/rules/commandInjection.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/csrf.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/csrf.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/csrf.js +261 -0
- package/dist/rules/vulnerabilities/rules/csrf.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/deserialization.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/deserialization.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/deserialization.js +336 -0
- package/dist/rules/vulnerabilities/rules/deserialization.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.js +325 -0
- package/dist/rules/vulnerabilities/rules/fileUpload.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js +446 -0
- package/dist/rules/vulnerabilities/rules/hardcodedSecrets.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/index.d.ts +17 -0
- package/dist/rules/vulnerabilities/rules/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/index.js +47 -0
- package/dist/rules/vulnerabilities/rules/index.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.js +351 -0
- package/dist/rules/vulnerabilities/rules/pathTraversal.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.js +272 -0
- package/dist/rules/vulnerabilities/rules/prototypePollution.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js +438 -0
- package/dist/rules/vulnerabilities/rules/securityMisconfiguration.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts +12 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.js +636 -0
- package/dist/rules/vulnerabilities/rules/sqlInjection.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/ssrf.d.ts +8 -0
- package/dist/rules/vulnerabilities/rules/ssrf.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/ssrf.js +401 -0
- package/dist/rules/vulnerabilities/rules/ssrf.js.map +1 -0
- package/dist/rules/vulnerabilities/rules/xss.d.ts +11 -0
- package/dist/rules/vulnerabilities/rules/xss.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/rules/xss.js +724 -0
- package/dist/rules/vulnerabilities/rules/xss.js.map +1 -0
- package/dist/rules/vulnerabilities/scoring/index.d.ts +80 -0
- package/dist/rules/vulnerabilities/scoring/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/scoring/index.js +414 -0
- package/dist/rules/vulnerabilities/scoring/index.js.map +1 -0
- package/dist/rules/vulnerabilities/types/index.d.ts +830 -0
- package/dist/rules/vulnerabilities/types/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/types/index.js +164 -0
- package/dist/rules/vulnerabilities/types/index.js.map +1 -0
- package/dist/rules/vulnerabilities/utils/index.d.ts +206 -0
- package/dist/rules/vulnerabilities/utils/index.d.ts.map +1 -0
- package/dist/rules/vulnerabilities/utils/index.js +615 -0
- package/dist/rules/vulnerabilities/utils/index.js.map +1 -0
- package/dist/types/index.d.ts +359 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +61 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +82 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +326 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +139 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/ARCHITECTURE.md +320 -0
- package/docs/V1.2.1-IA_Performances.md +116 -0
- package/docs/images/WIN_Defender.png +0 -0
- package/package.json +68 -0
- package/secure-scan.config.json +134 -0
- package/secure-scan.sln +29 -0
- package/src/ai/aiAnalyzer.ts +714 -0
- package/src/ai/index.ts +5 -0
- package/src/analyzers/base/baseAnalyzer.ts +66 -0
- package/src/analyzers/base/index.ts +5 -0
- package/src/analyzers/c-cpp/cppAnalyzer.ts +308 -0
- package/src/analyzers/c-cpp/index.ts +5 -0
- package/src/analyzers/core/engine/index.ts +5 -0
- package/src/analyzers/core/engine/ruleEngine.ts +221 -0
- package/src/analyzers/core/index.ts +8 -0
- package/src/analyzers/core/scanner/fileScanner.ts +204 -0
- package/src/analyzers/core/scanner/index.ts +5 -0
- package/src/analyzers/core/scoring/index.ts +5 -0
- package/src/analyzers/core/scoring/riskScoring.ts +198 -0
- package/src/analyzers/core/securityScanner.ts +321 -0
- package/src/analyzers/csharp/csharpAnalyzer.ts +328 -0
- package/src/analyzers/csharp/index.ts +5 -0
- package/src/analyzers/iac/iacAnalyzer.ts +318 -0
- package/src/analyzers/iac/index.ts +5 -0
- package/src/analyzers/index.ts +67 -0
- package/src/analyzers/java/index.ts +5 -0
- package/src/analyzers/java/javaAnalyzer.ts +320 -0
- package/src/analyzers/javascript/PROMPT_JS_ANALYZER.md +267 -0
- package/src/analyzers/javascript/astUtils.ts +789 -0
- package/src/analyzers/javascript/index.ts +50 -0
- package/src/analyzers/javascript/javascriptAnalyzer.ts +984 -0
- package/src/analyzers/javascript/malwareDetector.ts +697 -0
- package/src/analyzers/javascript/packageJsonAnalyzer.ts +626 -0
- package/src/analyzers/javascript/taintAnalyzer.ts +630 -0
- package/src/analyzers/php/index.ts +5 -0
- package/src/analyzers/php/phpAnalyzer.ts +280 -0
- package/src/analyzers/python/index.ts +5 -0
- package/src/analyzers/python/pythonAnalyzer.ts +319 -0
- package/src/cli/index.ts +276 -0
- package/src/dependencies/aiDependencyAnalyzer.ts +496 -0
- package/src/dependencies/database/cveDatabase.ts +426 -0
- package/src/dependencies/database/index.ts +6 -0
- package/src/dependencies/database/maliciousPackages.ts +286 -0
- package/src/dependencies/dependencyAnalyzer.ts +394 -0
- package/src/dependencies/detectors/index.ts +7 -0
- package/src/dependencies/detectors/securityStandards.ts +200 -0
- package/src/dependencies/detectors/vulnerabilityDetector.ts +343 -0
- package/src/dependencies/index.ts +27 -0
- package/src/dependencies/installed/index.ts +8 -0
- package/src/dependencies/installed/installedScanner.ts +821 -0
- package/src/dependencies/installed/malwarePatterns.ts +492 -0
- package/src/dependencies/installed/types.ts +287 -0
- package/src/dependencies/parsers/base/baseParser.ts +108 -0
- package/src/dependencies/parsers/base/index.ts +6 -0
- package/src/dependencies/parsers/cpp/cppParser.ts +245 -0
- package/src/dependencies/parsers/cpp/index.ts +6 -0
- package/src/dependencies/parsers/csharp/csharpParser.ts +151 -0
- package/src/dependencies/parsers/csharp/index.ts +6 -0
- package/src/dependencies/parsers/index.ts +56 -0
- package/src/dependencies/parsers/java/index.ts +6 -0
- package/src/dependencies/parsers/java/javaParser.ts +203 -0
- package/src/dependencies/parsers/javascript/index.ts +6 -0
- package/src/dependencies/parsers/javascript/javascriptParser.ts +362 -0
- package/src/dependencies/parsers/php/index.ts +6 -0
- package/src/dependencies/parsers/php/phpParser.ts +208 -0
- package/src/dependencies/parsers/python/index.ts +6 -0
- package/src/dependencies/parsers/python/pythonParser.ts +437 -0
- package/src/dependencies/types.ts +330 -0
- package/src/i18n/index.ts +1 -0
- package/src/i18n/translations.ts +194 -0
- package/src/index.ts +16 -0
- package/src/reports/dependencyReportGenerator.ts +717 -0
- package/src/reports/htmlReportGenerator.ts +781 -0
- package/src/reports/index.ts +7 -0
- package/src/reports/installedDepsReportGenerator.ts +899 -0
- package/src/rules/index.ts +58 -0
- package/src/rules/malware/INFO.md +287 -0
- package/src/rules/malware/categories/backdoors.ts +174 -0
- package/src/rules/malware/categories/cryptominers.ts +434 -0
- package/src/rules/malware/categories/exfiltration.ts +677 -0
- package/src/rules/malware/categories/keyloggers.ts +780 -0
- package/src/rules/malware/categories/loaders.ts +721 -0
- package/src/rules/malware/categories/network.ts +639 -0
- package/src/rules/malware/categories/obfuscation.ts +788 -0
- package/src/rules/malware/constants/index.ts +358 -0
- package/src/rules/malware/engine/index.ts +758 -0
- package/src/rules/malware/index.ts +928 -0
- package/src/rules/malware/scoring/index.ts +549 -0
- package/src/rules/malware/types/index.ts +752 -0
- package/src/rules/malware/utils/index.ts +643 -0
- package/src/rules/standards.ts +372 -0
- package/src/rules/vulnerabilities/PROMPT_VULNERABILITIES.md +226 -0
- package/src/rules/vulnerabilities/constants/index.ts +625 -0
- package/src/rules/vulnerabilities/engine/index.ts +831 -0
- package/src/rules/vulnerabilities/index.ts +312 -0
- package/src/rules/vulnerabilities/rules/authentication.ts +426 -0
- package/src/rules/vulnerabilities/rules/commandInjection.ts +307 -0
- package/src/rules/vulnerabilities/rules/csrf.ts +268 -0
- package/src/rules/vulnerabilities/rules/deserialization.ts +343 -0
- package/src/rules/vulnerabilities/rules/fileUpload.ts +332 -0
- package/src/rules/vulnerabilities/rules/hardcodedSecrets.ts +453 -0
- package/src/rules/vulnerabilities/rules/index.ts +17 -0
- package/src/rules/vulnerabilities/rules/pathTraversal.ts +358 -0
- package/src/rules/vulnerabilities/rules/prototypePollution.ts +279 -0
- package/src/rules/vulnerabilities/rules/securityMisconfiguration.ts +445 -0
- package/src/rules/vulnerabilities/rules/sqlInjection.ts +669 -0
- package/src/rules/vulnerabilities/rules/ssrf.ts +408 -0
- package/src/rules/vulnerabilities/rules/xss.ts +753 -0
- package/src/rules/vulnerabilities/scoring/index.ts +543 -0
- package/src/rules/vulnerabilities/types/index.ts +1004 -0
- package/src/rules/vulnerabilities/utils/index.ts +709 -0
- package/src/types/index.ts +391 -0
- package/src/utils/index.ts +306 -0
- package/src/utils/logger.ts +150 -0
- package/test-installed-scanner.ts +136 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,928 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Malware Detection Module - Main Entry Point
|
|
3
|
+
* @module rules/malware
|
|
4
|
+
*
|
|
5
|
+
* Enterprise-grade malware detection system with:
|
|
6
|
+
* - Multi-pattern detection (Regex, AST, Heuristic, Semantic)
|
|
7
|
+
* - Dynamic scoring with MITRE ATT&CK integration
|
|
8
|
+
* - 60+ comprehensive rules across 7 categories
|
|
9
|
+
* - Support for 13 programming languages
|
|
10
|
+
* - ReDoS protection and timeout safeguards
|
|
11
|
+
* - Obfuscation detection and entropy analysis
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { MalwareRuleEngine, createMalwareEngine } from './rules/malware';
|
|
16
|
+
*
|
|
17
|
+
* // Create engine with all rules
|
|
18
|
+
* const engine = createMalwareEngine();
|
|
19
|
+
*
|
|
20
|
+
* // Analyze code
|
|
21
|
+
* const findings = await engine.analyze(code, {
|
|
22
|
+
* filePath: 'suspicious.js',
|
|
23
|
+
* language: 'javascript'
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Check results
|
|
27
|
+
* findings.forEach(finding => {
|
|
28
|
+
* console.log(`${finding.severity}: ${finding.ruleName}`);
|
|
29
|
+
* console.log(`Score: ${finding.score.totalScore}/100`);
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// LEGACY TYPE COMPATIBILITY
|
|
36
|
+
// ============================================================================
|
|
37
|
+
|
|
38
|
+
import { Rule, Severity, ThreatType, FindingCategory } from '../../types';
|
|
39
|
+
import { getStandardsForThreat } from '../standards';
|
|
40
|
+
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// NEW TYPE EXPORTS
|
|
43
|
+
// ============================================================================
|
|
44
|
+
|
|
45
|
+
export * from './types';
|
|
46
|
+
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// UTILITY EXPORTS
|
|
49
|
+
// ============================================================================
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
calculateEntropy,
|
|
53
|
+
analyzeEntropyByLine,
|
|
54
|
+
normalizeCode,
|
|
55
|
+
detectObfuscationLevel,
|
|
56
|
+
detectAntiDebugging,
|
|
57
|
+
detectEnvironmentChecks,
|
|
58
|
+
safeRegexMatch,
|
|
59
|
+
extractSnippet,
|
|
60
|
+
analyzeBase64Content,
|
|
61
|
+
extractSuspiciousStrings
|
|
62
|
+
} from './utils';
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// CONSTANTS EXPORTS
|
|
66
|
+
// ============================================================================
|
|
67
|
+
|
|
68
|
+
export {
|
|
69
|
+
SCORE_THRESHOLDS,
|
|
70
|
+
ENTROPY_THRESHOLDS,
|
|
71
|
+
LIMITS,
|
|
72
|
+
OBFUSCATION_INDICATORS,
|
|
73
|
+
SUSPICIOUS_HOSTS,
|
|
74
|
+
CRYPTO_INDICATORS,
|
|
75
|
+
DANGEROUS_FUNCTIONS,
|
|
76
|
+
MITRE_TECHNIQUES
|
|
77
|
+
} from './constants';
|
|
78
|
+
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// SCORING EXPORTS
|
|
81
|
+
// ============================================================================
|
|
82
|
+
|
|
83
|
+
export { MalwareScoreCalculator } from './scoring';
|
|
84
|
+
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// ENGINE EXPORTS
|
|
87
|
+
// ============================================================================
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
MalwareRuleEngine,
|
|
91
|
+
PatternMatcher,
|
|
92
|
+
createDefaultEngine,
|
|
93
|
+
quickScan,
|
|
94
|
+
EngineOptions
|
|
95
|
+
} from './engine';
|
|
96
|
+
|
|
97
|
+
// ============================================================================
|
|
98
|
+
// RULE CATEGORY EXPORTS
|
|
99
|
+
// ============================================================================
|
|
100
|
+
|
|
101
|
+
import { backdoorRules as newBackdoorRules } from './categories/backdoors';
|
|
102
|
+
import { cryptominerRules as newCryptominerRules } from './categories/cryptominers';
|
|
103
|
+
import { keyloggerRules as newKeyloggerRules } from './categories/keyloggers';
|
|
104
|
+
import { exfiltrationRules as newExfiltrationRules } from './categories/exfiltration';
|
|
105
|
+
import { obfuscationRules as newObfuscationRules } from './categories/obfuscation';
|
|
106
|
+
import { loaderRules as newLoaderRules } from './categories/loaders';
|
|
107
|
+
import { networkRules as newNetworkRules } from './categories/network';
|
|
108
|
+
|
|
109
|
+
export {
|
|
110
|
+
newBackdoorRules as backdoorRulesV2,
|
|
111
|
+
newCryptominerRules as cryptominerRulesV2,
|
|
112
|
+
newKeyloggerRules as keyloggerRulesV2,
|
|
113
|
+
newExfiltrationRules as exfiltrationRulesV2,
|
|
114
|
+
newObfuscationRules as obfuscationRulesV2,
|
|
115
|
+
newLoaderRules as loaderRulesV2,
|
|
116
|
+
newNetworkRules as networkRulesV2
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// ============================================================================
|
|
120
|
+
// AGGREGATED RULE SETS
|
|
121
|
+
// ============================================================================
|
|
122
|
+
|
|
123
|
+
import { MalwareRule } from './types';
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* All malware detection rules (60+ rules)
|
|
127
|
+
*/
|
|
128
|
+
export const allMalwareRules: MalwareRule[] = [
|
|
129
|
+
...newBackdoorRules, // 10 rules
|
|
130
|
+
...newCryptominerRules, // 11 rules
|
|
131
|
+
...newKeyloggerRules, // 12 rules
|
|
132
|
+
...newExfiltrationRules, // 15 rules
|
|
133
|
+
...newObfuscationRules, // 14 rules
|
|
134
|
+
...newLoaderRules, // 9 rules
|
|
135
|
+
...newNetworkRules // 10 rules
|
|
136
|
+
];
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Critical severity rules only
|
|
140
|
+
*/
|
|
141
|
+
export const criticalRules: MalwareRule[] = allMalwareRules.filter(
|
|
142
|
+
rule => rule.severity === 'critical'
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* High confidence rules only
|
|
147
|
+
*/
|
|
148
|
+
export const highConfidenceRules: MalwareRule[] = allMalwareRules.filter(
|
|
149
|
+
rule => rule.confidence === 'high'
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// ENGINE FACTORY FUNCTIONS
|
|
154
|
+
// ============================================================================
|
|
155
|
+
|
|
156
|
+
import { MalwareRuleEngine, EngineOptions } from './engine';
|
|
157
|
+
import { AnalysisOptions } from './types';
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Create a fully configured malware detection engine with all rules
|
|
161
|
+
*
|
|
162
|
+
* @param options - Optional analysis configuration
|
|
163
|
+
* @returns Configured MalwareRuleEngine instance
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* const engine = createMalwareEngine({
|
|
168
|
+
* enableHeuristics: true,
|
|
169
|
+
* enableAstAnalysis: true,
|
|
170
|
+
* minConfidence: 0.5
|
|
171
|
+
* });
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
export function createMalwareEngine(
|
|
175
|
+
options?: Partial<EngineOptions>
|
|
176
|
+
): MalwareRuleEngine {
|
|
177
|
+
return new MalwareRuleEngine(allMalwareRules, options);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Create an engine with only critical severity rules
|
|
182
|
+
*
|
|
183
|
+
* @param options - Optional analysis configuration
|
|
184
|
+
* @returns MalwareRuleEngine with critical rules only
|
|
185
|
+
*/
|
|
186
|
+
export function createCriticalOnlyEngine(
|
|
187
|
+
options?: Partial<EngineOptions>
|
|
188
|
+
): MalwareRuleEngine {
|
|
189
|
+
return new MalwareRuleEngine(criticalRules, options);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Create an engine with custom rule subset
|
|
194
|
+
*
|
|
195
|
+
* @param rules - Array of rules to include
|
|
196
|
+
* @param options - Optional analysis configuration
|
|
197
|
+
* @returns MalwareRuleEngine with specified rules
|
|
198
|
+
*/
|
|
199
|
+
export function createCustomEngine(
|
|
200
|
+
rules: MalwareRule[],
|
|
201
|
+
options?: Partial<EngineOptions>
|
|
202
|
+
): MalwareRuleEngine {
|
|
203
|
+
return new MalwareRuleEngine(rules, options);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// ============================================================================
|
|
207
|
+
// CONVENIENCE FUNCTIONS
|
|
208
|
+
// ============================================================================
|
|
209
|
+
|
|
210
|
+
import { MalwareFinding, AnalysisContext, SupportedLanguage } from './types';
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Quick malware scan with default settings
|
|
214
|
+
*
|
|
215
|
+
* @param code - Code to analyze
|
|
216
|
+
* @param language - Programming language
|
|
217
|
+
* @returns Scan results with malicious status
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* const result = await scanForMalware(suspiciousCode, 'javascript');
|
|
222
|
+
* if (result.isMalicious) {
|
|
223
|
+
* console.log(`Malware detected! Score: ${result.score}`);
|
|
224
|
+
* result.findings.forEach(f => console.log(f.ruleName));
|
|
225
|
+
* }
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
export async function scanForMalware(
|
|
229
|
+
code: string,
|
|
230
|
+
language?: string
|
|
231
|
+
): Promise<{
|
|
232
|
+
isMalicious: boolean;
|
|
233
|
+
score: number;
|
|
234
|
+
severity: 'critical' | 'high' | 'medium' | 'low' | 'clean';
|
|
235
|
+
findings: MalwareFinding[];
|
|
236
|
+
summary: {
|
|
237
|
+
totalFindings: number;
|
|
238
|
+
criticalCount: number;
|
|
239
|
+
highCount: number;
|
|
240
|
+
};
|
|
241
|
+
}> {
|
|
242
|
+
const engine = createMalwareEngine();
|
|
243
|
+
const context: AnalysisContext = {
|
|
244
|
+
filePath: 'scan',
|
|
245
|
+
content: code,
|
|
246
|
+
language: (language as SupportedLanguage) ?? SupportedLanguage.JAVASCRIPT
|
|
247
|
+
};
|
|
248
|
+
const findings = await engine.analyze(context);
|
|
249
|
+
|
|
250
|
+
const maxScore = findings.length > 0
|
|
251
|
+
? Math.max(...findings.map(f => f.malwareScore.score))
|
|
252
|
+
: 0;
|
|
253
|
+
|
|
254
|
+
const criticalCount = findings.filter(f => f.severity === 'critical').length;
|
|
255
|
+
const highCount = findings.filter(f => f.severity === 'high').length;
|
|
256
|
+
|
|
257
|
+
let severity: 'critical' | 'high' | 'medium' | 'low' | 'clean';
|
|
258
|
+
if (maxScore >= 85) severity = 'critical';
|
|
259
|
+
else if (maxScore >= 65) severity = 'high';
|
|
260
|
+
else if (maxScore >= 40) severity = 'medium';
|
|
261
|
+
else if (maxScore >= 20) severity = 'low';
|
|
262
|
+
else severity = 'clean';
|
|
263
|
+
|
|
264
|
+
return {
|
|
265
|
+
isMalicious: maxScore >= 40, // Medium threshold
|
|
266
|
+
score: maxScore,
|
|
267
|
+
severity,
|
|
268
|
+
findings,
|
|
269
|
+
summary: {
|
|
270
|
+
totalFindings: findings.length,
|
|
271
|
+
criticalCount,
|
|
272
|
+
highCount
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Check if code contains specific malware category
|
|
279
|
+
*
|
|
280
|
+
* @param code - Code to analyze
|
|
281
|
+
* @param category - Malware category to check
|
|
282
|
+
* @param language - Programming language
|
|
283
|
+
* @returns True if category detected
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```typescript
|
|
287
|
+
* const hasBackdoor = await hasMalwareCategory(code, 'backdoor', 'javascript');
|
|
288
|
+
* ```
|
|
289
|
+
*/
|
|
290
|
+
export async function hasMalwareCategory(
|
|
291
|
+
code: string,
|
|
292
|
+
category: 'backdoor' | 'cryptominer' | 'keylogger' | 'exfiltration' | 'obfuscation' | 'loader' | 'network',
|
|
293
|
+
language?: string
|
|
294
|
+
): Promise<boolean> {
|
|
295
|
+
let rules: MalwareRule[];
|
|
296
|
+
|
|
297
|
+
switch (category) {
|
|
298
|
+
case 'backdoor':
|
|
299
|
+
rules = newBackdoorRules;
|
|
300
|
+
break;
|
|
301
|
+
case 'cryptominer':
|
|
302
|
+
rules = newCryptominerRules;
|
|
303
|
+
break;
|
|
304
|
+
case 'keylogger':
|
|
305
|
+
rules = newKeyloggerRules;
|
|
306
|
+
break;
|
|
307
|
+
case 'exfiltration':
|
|
308
|
+
rules = newExfiltrationRules;
|
|
309
|
+
break;
|
|
310
|
+
case 'obfuscation':
|
|
311
|
+
rules = newObfuscationRules;
|
|
312
|
+
break;
|
|
313
|
+
case 'loader':
|
|
314
|
+
rules = newLoaderRules;
|
|
315
|
+
break;
|
|
316
|
+
case 'network':
|
|
317
|
+
rules = newNetworkRules;
|
|
318
|
+
break;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const engine = new MalwareRuleEngine(rules);
|
|
322
|
+
const context: AnalysisContext = {
|
|
323
|
+
filePath: 'scan',
|
|
324
|
+
content: code,
|
|
325
|
+
language: (language as SupportedLanguage) ?? SupportedLanguage.JAVASCRIPT
|
|
326
|
+
};
|
|
327
|
+
const findings = await engine.analyze(context);
|
|
328
|
+
|
|
329
|
+
return findings.length > 0;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Analyze code and generate detailed report
|
|
334
|
+
*
|
|
335
|
+
* @param code - Code to analyze
|
|
336
|
+
* @param filePath - File path for context
|
|
337
|
+
* @param language - Programming language
|
|
338
|
+
* @returns Detailed analysis report
|
|
339
|
+
*/
|
|
340
|
+
export async function generateMalwareReport(
|
|
341
|
+
code: string,
|
|
342
|
+
filePath: string,
|
|
343
|
+
language?: string
|
|
344
|
+
): Promise<{
|
|
345
|
+
filePath: string;
|
|
346
|
+
language?: string;
|
|
347
|
+
timestamp: Date;
|
|
348
|
+
findings: MalwareFinding[];
|
|
349
|
+
summary: {
|
|
350
|
+
totalFindings: number;
|
|
351
|
+
bySeverity: Record<string, number>;
|
|
352
|
+
byCategory: Record<string, number>;
|
|
353
|
+
highestScore: number;
|
|
354
|
+
isMalicious: boolean;
|
|
355
|
+
};
|
|
356
|
+
mitreAttack: Array<{
|
|
357
|
+
tactic: string;
|
|
358
|
+
technique: string;
|
|
359
|
+
count: number;
|
|
360
|
+
}>;
|
|
361
|
+
recommendations: string[];
|
|
362
|
+
}> {
|
|
363
|
+
const engine = createMalwareEngine();
|
|
364
|
+
const context: AnalysisContext = {
|
|
365
|
+
filePath,
|
|
366
|
+
content: code,
|
|
367
|
+
language: (language as SupportedLanguage) ?? SupportedLanguage.JAVASCRIPT
|
|
368
|
+
};
|
|
369
|
+
const findings = await engine.analyze(context);
|
|
370
|
+
const summary = engine.generateSummary(findings);
|
|
371
|
+
|
|
372
|
+
// Aggregate MITRE ATT&CK techniques
|
|
373
|
+
const mitreTechniques = new Map<string, { tactic: string; technique: string; count: number }>();
|
|
374
|
+
|
|
375
|
+
for (const finding of findings) {
|
|
376
|
+
if (finding.mitreAttack) {
|
|
377
|
+
for (const mitre of finding.mitreAttack) {
|
|
378
|
+
const key = `${mitre.tacticId}-${mitre.techniqueId}`;
|
|
379
|
+
const existing = mitreTechniques.get(key);
|
|
380
|
+
if (existing) {
|
|
381
|
+
existing.count++;
|
|
382
|
+
} else {
|
|
383
|
+
mitreTechniques.set(key, {
|
|
384
|
+
tactic: mitre.tacticName,
|
|
385
|
+
technique: mitre.techniqueName,
|
|
386
|
+
count: 1
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Generate recommendations
|
|
394
|
+
const recommendations: string[] = [];
|
|
395
|
+
if (summary.criticalCount > 0) {
|
|
396
|
+
recommendations.push('URGENT: Critical malware detected. Isolate and analyze immediately.');
|
|
397
|
+
}
|
|
398
|
+
if (summary.bySeverity['high'] > 0) {
|
|
399
|
+
recommendations.push('High severity threats found. Review and remove malicious code.');
|
|
400
|
+
}
|
|
401
|
+
if (findings.some(f => String(f.threatType).includes('backdoor'))) {
|
|
402
|
+
recommendations.push('Backdoor detected. Check for unauthorized access and reset credentials.');
|
|
403
|
+
}
|
|
404
|
+
if (findings.some(f => String(f.threatType).includes('exfiltration'))) {
|
|
405
|
+
recommendations.push('Data exfiltration detected. Investigate what data may have been stolen.');
|
|
406
|
+
}
|
|
407
|
+
if (findings.some(f => String(f.category) === 'obfuscation')) {
|
|
408
|
+
recommendations.push('Obfuscation detected. Use deobfuscation tools to analyze intent.');
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// Calculate by category
|
|
412
|
+
const byCategory: Record<string, number> = {};
|
|
413
|
+
for (const finding of findings) {
|
|
414
|
+
byCategory[finding.category] = (byCategory[finding.category] || 0) + 1;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return {
|
|
418
|
+
filePath,
|
|
419
|
+
language,
|
|
420
|
+
timestamp: new Date(),
|
|
421
|
+
findings,
|
|
422
|
+
summary: {
|
|
423
|
+
...summary,
|
|
424
|
+
byCategory,
|
|
425
|
+
isMalicious: summary.highestScore >= 40
|
|
426
|
+
},
|
|
427
|
+
mitreAttack: Array.from(mitreTechniques.values()),
|
|
428
|
+
recommendations
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
// ============================================================================
|
|
433
|
+
// MODULE METADATA
|
|
434
|
+
// ============================================================================
|
|
435
|
+
|
|
436
|
+
export const MALWARE_MODULE_INFO = {
|
|
437
|
+
version: '2.0.0',
|
|
438
|
+
totalRules: allMalwareRules.length,
|
|
439
|
+
categories: [
|
|
440
|
+
'backdoors',
|
|
441
|
+
'cryptominers',
|
|
442
|
+
'keyloggers',
|
|
443
|
+
'exfiltration',
|
|
444
|
+
'obfuscation',
|
|
445
|
+
'loaders',
|
|
446
|
+
'network'
|
|
447
|
+
],
|
|
448
|
+
supportedLanguages: [
|
|
449
|
+
'javascript',
|
|
450
|
+
'typescript',
|
|
451
|
+
'python',
|
|
452
|
+
'php',
|
|
453
|
+
'c',
|
|
454
|
+
'cpp',
|
|
455
|
+
'csharp',
|
|
456
|
+
'java',
|
|
457
|
+
'ruby',
|
|
458
|
+
'go',
|
|
459
|
+
'rust',
|
|
460
|
+
'shell',
|
|
461
|
+
'powershell'
|
|
462
|
+
],
|
|
463
|
+
features: [
|
|
464
|
+
'Multi-pattern detection (Regex, AST, Heuristic, Semantic)',
|
|
465
|
+
'Dynamic malware scoring (0-100)',
|
|
466
|
+
'MITRE ATT&CK framework integration',
|
|
467
|
+
'Obfuscation and entropy analysis',
|
|
468
|
+
'ReDoS protection',
|
|
469
|
+
'Concurrent file analysis',
|
|
470
|
+
'Detailed remediation steps',
|
|
471
|
+
'False positive reduction'
|
|
472
|
+
]
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Get module information
|
|
477
|
+
*/
|
|
478
|
+
export function getModuleInfo(): typeof MALWARE_MODULE_INFO {
|
|
479
|
+
return MALWARE_MODULE_INFO;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// ============================================================================
|
|
483
|
+
// LEGACY COMPATIBILITY - ORIGINAL RULES
|
|
484
|
+
// ============================================================================
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Backdoor Detection Rules
|
|
488
|
+
*/
|
|
489
|
+
const backdoorRules: Rule[] = [
|
|
490
|
+
{
|
|
491
|
+
id: 'MAL-BACK-001',
|
|
492
|
+
name: 'Potential Backdoor - Reverse Shell',
|
|
493
|
+
description: 'Code pattern consistent with a reverse shell detected. This allows remote attackers to gain shell access to the system.',
|
|
494
|
+
languages: ['javascript', 'typescript', 'python', 'php', 'c', 'cpp', 'csharp'],
|
|
495
|
+
threatType: ThreatType.REVERSE_SHELL,
|
|
496
|
+
category: FindingCategory.MALWARE,
|
|
497
|
+
severity: Severity.CRITICAL,
|
|
498
|
+
standards: getStandardsForThreat(ThreatType.REVERSE_SHELL),
|
|
499
|
+
patterns: [
|
|
500
|
+
{
|
|
501
|
+
type: 'regex',
|
|
502
|
+
pattern: 'socket\\.(?:connect|create_connection)\\s*\\([^)]*\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
|
|
503
|
+
flags: 'gi'
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
type: 'regex',
|
|
507
|
+
pattern: '\\/bin\\/(?:bash|sh)\\s+-i',
|
|
508
|
+
flags: 'gi'
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
type: 'regex',
|
|
512
|
+
pattern: 'nc\\s+-e\\s+\\/bin\\/(?:bash|sh)',
|
|
513
|
+
flags: 'gi'
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
type: 'regex',
|
|
517
|
+
pattern: 'subprocess\\.(?:Popen|call).*(?:bash|sh|cmd)',
|
|
518
|
+
flags: 'gi'
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
type: 'regex',
|
|
522
|
+
pattern: 'dup2\\s*\\(.*(?:STDIN|STDOUT|STDERR)',
|
|
523
|
+
flags: 'gi'
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
type: 'regex',
|
|
527
|
+
pattern: 'CreateProcess.*cmd\\.exe',
|
|
528
|
+
flags: 'gi'
|
|
529
|
+
}
|
|
530
|
+
],
|
|
531
|
+
remediation: 'This code appears to implement a reverse shell backdoor. Remove immediately and investigate how this code was introduced. Audit all recent commits and contributor access.',
|
|
532
|
+
enabled: true,
|
|
533
|
+
tags: ['backdoor', 'reverse-shell', 'malware', 'critical']
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
id: 'MAL-BACK-002',
|
|
537
|
+
name: 'Web Shell Pattern',
|
|
538
|
+
description: 'Code pattern consistent with a web shell detected. Web shells provide attackers with remote command execution via web interface.',
|
|
539
|
+
languages: ['php', 'python', 'javascript', 'typescript'],
|
|
540
|
+
threatType: ThreatType.BACKDOOR,
|
|
541
|
+
category: FindingCategory.MALWARE,
|
|
542
|
+
severity: Severity.CRITICAL,
|
|
543
|
+
standards: getStandardsForThreat(ThreatType.BACKDOOR),
|
|
544
|
+
patterns: [
|
|
545
|
+
{
|
|
546
|
+
type: 'regex',
|
|
547
|
+
pattern: '\\$_(?:GET|POST|REQUEST)\\s*\\[[\'"][^\'"]+[\'"]\\s*\\].*(?:exec|system|passthru|shell_exec|eval)',
|
|
548
|
+
flags: 'gi'
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
type: 'regex',
|
|
552
|
+
pattern: 'eval\\s*\\(\\s*(?:base64_decode|gzinflate|str_rot13)',
|
|
553
|
+
flags: 'gi'
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
type: 'regex',
|
|
557
|
+
pattern: 'assert\\s*\\(\\s*\\$_',
|
|
558
|
+
flags: 'gi'
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
type: 'regex',
|
|
562
|
+
pattern: 'preg_replace\\s*\\([^)]*\\/e[\'"]',
|
|
563
|
+
flags: 'gi'
|
|
564
|
+
}
|
|
565
|
+
],
|
|
566
|
+
remediation: 'This appears to be a web shell. Remove immediately. Investigate system for other compromises. Check web server logs for unauthorized access.',
|
|
567
|
+
enabled: true,
|
|
568
|
+
tags: ['webshell', 'backdoor', 'rce', 'critical']
|
|
569
|
+
}
|
|
570
|
+
];
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Cryptominer Detection Rules
|
|
574
|
+
*/
|
|
575
|
+
const cryptominerRules: Rule[] = [
|
|
576
|
+
{
|
|
577
|
+
id: 'MAL-CRYPT-001',
|
|
578
|
+
name: 'Cryptocurrency Mining Code',
|
|
579
|
+
description: 'Code patterns associated with cryptocurrency mining detected. This may indicate unauthorized use of computing resources.',
|
|
580
|
+
languages: ['javascript', 'typescript', 'python', 'php'],
|
|
581
|
+
threatType: ThreatType.CRYPTOMINER,
|
|
582
|
+
category: FindingCategory.MALWARE,
|
|
583
|
+
severity: Severity.HIGH,
|
|
584
|
+
standards: getStandardsForThreat(ThreatType.CRYPTOMINER),
|
|
585
|
+
patterns: [
|
|
586
|
+
{
|
|
587
|
+
type: 'regex',
|
|
588
|
+
pattern: 'coinhive|cryptoloot|coin-hive|coinimp|cryptonight',
|
|
589
|
+
flags: 'gi'
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
type: 'regex',
|
|
593
|
+
pattern: 'stratum\\+tcp:\\/\\/',
|
|
594
|
+
flags: 'gi'
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
type: 'regex',
|
|
598
|
+
pattern: 'xmrig|xmr-stak|minerd|cgminer',
|
|
599
|
+
flags: 'gi'
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
type: 'regex',
|
|
603
|
+
pattern: 'CryptoNight|RandomX|Ethash',
|
|
604
|
+
flags: 'g'
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
type: 'regex',
|
|
608
|
+
pattern: 'miner\\.(?:start|stop|mine)',
|
|
609
|
+
flags: 'gi'
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
type: 'regex',
|
|
613
|
+
pattern: 'hashrate|nonce.*difficulty',
|
|
614
|
+
flags: 'gi'
|
|
615
|
+
}
|
|
616
|
+
],
|
|
617
|
+
remediation: 'Remove cryptocurrency mining code immediately. This is resource theft. Investigate how this code was introduced and review access controls.',
|
|
618
|
+
enabled: true,
|
|
619
|
+
tags: ['cryptominer', 'resource-abuse', 'malware']
|
|
620
|
+
}
|
|
621
|
+
];
|
|
622
|
+
|
|
623
|
+
/**
|
|
624
|
+
* Keylogger Detection Rules
|
|
625
|
+
*/
|
|
626
|
+
const keyloggerRules: Rule[] = [
|
|
627
|
+
{
|
|
628
|
+
id: 'MAL-KEY-001',
|
|
629
|
+
name: 'Potential Keylogger',
|
|
630
|
+
description: 'Code pattern consistent with keylogging behavior detected. Keyloggers capture and potentially exfiltrate user keystrokes.',
|
|
631
|
+
languages: ['javascript', 'typescript', 'python', 'csharp', 'c', 'cpp'],
|
|
632
|
+
threatType: ThreatType.KEYLOGGER,
|
|
633
|
+
category: FindingCategory.MALWARE,
|
|
634
|
+
severity: Severity.CRITICAL,
|
|
635
|
+
standards: getStandardsForThreat(ThreatType.KEYLOGGER),
|
|
636
|
+
patterns: [
|
|
637
|
+
{
|
|
638
|
+
type: 'regex',
|
|
639
|
+
pattern: 'addEventListener\\s*\\([\'"]key(?:down|up|press)[\'"]',
|
|
640
|
+
flags: 'gi'
|
|
641
|
+
},
|
|
642
|
+
{
|
|
643
|
+
type: 'regex',
|
|
644
|
+
pattern: 'onkey(?:down|up|press)\\s*=',
|
|
645
|
+
flags: 'gi'
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
type: 'regex',
|
|
649
|
+
pattern: 'pynput\\.keyboard\\.Listener',
|
|
650
|
+
flags: 'gi'
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
type: 'regex',
|
|
654
|
+
pattern: 'GetAsyncKeyState|SetWindowsHookEx.*WH_KEYBOARD',
|
|
655
|
+
flags: 'gi'
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
type: 'regex',
|
|
659
|
+
pattern: 'keyboard\\.on_(?:press|release)',
|
|
660
|
+
flags: 'gi'
|
|
661
|
+
}
|
|
662
|
+
],
|
|
663
|
+
remediation: 'This code captures keyboard input. If not intentional for legitimate purposes (like accessibility), remove immediately and investigate.',
|
|
664
|
+
enabled: true,
|
|
665
|
+
tags: ['keylogger', 'spyware', 'malware', 'critical']
|
|
666
|
+
}
|
|
667
|
+
];
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Data Exfiltration Detection Rules
|
|
671
|
+
*/
|
|
672
|
+
const exfiltrationRules: Rule[] = [
|
|
673
|
+
{
|
|
674
|
+
id: 'MAL-EXFIL-001',
|
|
675
|
+
name: 'Suspicious Data Exfiltration',
|
|
676
|
+
description: 'Code pattern suggests collection and transmission of sensitive data to external endpoints.',
|
|
677
|
+
languages: ['javascript', 'typescript', 'python', 'php'],
|
|
678
|
+
threatType: ThreatType.DATA_EXFILTRATION,
|
|
679
|
+
category: FindingCategory.MALWARE,
|
|
680
|
+
severity: Severity.CRITICAL,
|
|
681
|
+
standards: getStandardsForThreat(ThreatType.DATA_EXFILTRATION),
|
|
682
|
+
patterns: [
|
|
683
|
+
{
|
|
684
|
+
type: 'regex',
|
|
685
|
+
pattern: 'document\\.cookie.*(?:fetch|XMLHttpRequest|ajax|axios)',
|
|
686
|
+
flags: 'gis'
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
type: 'regex',
|
|
690
|
+
pattern: 'localStorage.*(?:fetch|XMLHttpRequest|ajax)',
|
|
691
|
+
flags: 'gis'
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
type: 'regex',
|
|
695
|
+
pattern: '(?:password|credit|ssn|secret).*(?:http|fetch|post)',
|
|
696
|
+
flags: 'gis'
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
type: 'regex',
|
|
700
|
+
pattern: 'navigator\\.(?:credentials|clipboard).*fetch',
|
|
701
|
+
flags: 'gis'
|
|
702
|
+
}
|
|
703
|
+
],
|
|
704
|
+
remediation: 'This code appears to collect and transmit sensitive data. Verify this is intentional and authorized. If not, remove immediately and audit data flows.',
|
|
705
|
+
enabled: true,
|
|
706
|
+
tags: ['exfiltration', 'data-theft', 'malware']
|
|
707
|
+
}
|
|
708
|
+
];
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Obfuscated Code Detection Rules
|
|
712
|
+
*/
|
|
713
|
+
const obfuscationRules: Rule[] = [
|
|
714
|
+
{
|
|
715
|
+
id: 'MAL-OBF-001',
|
|
716
|
+
name: 'Heavily Obfuscated Code',
|
|
717
|
+
description: 'Code appears to be heavily obfuscated, potentially hiding malicious functionality. Legitimate code rarely requires this level of obfuscation.',
|
|
718
|
+
languages: ['javascript', 'typescript', 'python', 'php'],
|
|
719
|
+
threatType: ThreatType.OBFUSCATED_CODE,
|
|
720
|
+
category: FindingCategory.MALWARE,
|
|
721
|
+
severity: Severity.HIGH,
|
|
722
|
+
standards: getStandardsForThreat(ThreatType.OBFUSCATED_CODE),
|
|
723
|
+
patterns: [
|
|
724
|
+
{
|
|
725
|
+
type: 'regex',
|
|
726
|
+
pattern: '\\\\x[0-9a-f]{2}(?:\\\\x[0-9a-f]{2}){10,}',
|
|
727
|
+
flags: 'gi'
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
type: 'regex',
|
|
731
|
+
pattern: '\\\\u[0-9a-f]{4}(?:\\\\u[0-9a-f]{4}){10,}',
|
|
732
|
+
flags: 'gi'
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
type: 'regex',
|
|
736
|
+
pattern: 'String\\.fromCharCode\\s*\\([^)]{50,}\\)',
|
|
737
|
+
flags: 'gi'
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
type: 'regex',
|
|
741
|
+
pattern: 'atob\\s*\\([\'"][A-Za-z0-9+/=]{100,}[\'"]\\)',
|
|
742
|
+
flags: 'g'
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
type: 'regex',
|
|
746
|
+
pattern: 'eval\\s*\\(\\s*(?:atob|Buffer\\.from|unescape)',
|
|
747
|
+
flags: 'gi'
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
type: 'regex',
|
|
751
|
+
pattern: '_0x[a-f0-9]{4,}',
|
|
752
|
+
flags: 'gi'
|
|
753
|
+
}
|
|
754
|
+
],
|
|
755
|
+
remediation: 'Heavily obfuscated code should be investigated. Deobfuscate and review the actual functionality. Consider removing if source cannot be verified.',
|
|
756
|
+
enabled: true,
|
|
757
|
+
tags: ['obfuscation', 'suspicious', 'malware']
|
|
758
|
+
}
|
|
759
|
+
];
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* Embedded Payload Detection Rules
|
|
763
|
+
*/
|
|
764
|
+
const payloadRules: Rule[] = [
|
|
765
|
+
{
|
|
766
|
+
id: 'MAL-PAYLOAD-001',
|
|
767
|
+
name: 'Embedded Binary Payload',
|
|
768
|
+
description: 'Large base64-encoded or hex-encoded data detected that may contain embedded malware or executable payloads.',
|
|
769
|
+
languages: ['javascript', 'typescript', 'python', 'php', 'java', 'csharp'],
|
|
770
|
+
threatType: ThreatType.EMBEDDED_PAYLOAD,
|
|
771
|
+
category: FindingCategory.MALWARE,
|
|
772
|
+
severity: Severity.HIGH,
|
|
773
|
+
standards: getStandardsForThreat(ThreatType.EMBEDDED_PAYLOAD),
|
|
774
|
+
patterns: [
|
|
775
|
+
{
|
|
776
|
+
type: 'regex',
|
|
777
|
+
pattern: '[\'"][A-Za-z0-9+/]{500,}={0,2}[\'"]',
|
|
778
|
+
flags: 'g'
|
|
779
|
+
},
|
|
780
|
+
{
|
|
781
|
+
type: 'regex',
|
|
782
|
+
pattern: '(?:4d5a|7f454c46|cafebabe)[0-9a-f]{100,}',
|
|
783
|
+
flags: 'gi'
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
type: 'regex',
|
|
787
|
+
pattern: 'base64\\.b64decode\\s*\\([\'"][A-Za-z0-9+/]{200,}',
|
|
788
|
+
flags: 'g'
|
|
789
|
+
}
|
|
790
|
+
],
|
|
791
|
+
remediation: 'Large embedded binary data should be investigated. Extract and analyze the payload. If legitimate, document its purpose; otherwise, remove.',
|
|
792
|
+
enabled: true,
|
|
793
|
+
tags: ['payload', 'binary', 'embedded', 'malware']
|
|
794
|
+
}
|
|
795
|
+
];
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Suspicious Network Activity Rules
|
|
799
|
+
*/
|
|
800
|
+
const networkRules: Rule[] = [
|
|
801
|
+
{
|
|
802
|
+
id: 'MAL-NET-001',
|
|
803
|
+
name: 'Suspicious External Connection',
|
|
804
|
+
description: 'Code makes connections to external IP addresses or suspicious domains. This may indicate C2 communication or data exfiltration.',
|
|
805
|
+
languages: ['javascript', 'typescript', 'python', 'php', 'java', 'csharp'],
|
|
806
|
+
threatType: ThreatType.SUSPICIOUS_NETWORK,
|
|
807
|
+
category: FindingCategory.MALWARE,
|
|
808
|
+
severity: Severity.MEDIUM,
|
|
809
|
+
standards: getStandardsForThreat(ThreatType.SUSPICIOUS_NETWORK),
|
|
810
|
+
patterns: [
|
|
811
|
+
{
|
|
812
|
+
type: 'regex',
|
|
813
|
+
pattern: '(?:fetch|axios|request|http).*(?:pastebin|hastebin|ghostbin)',
|
|
814
|
+
flags: 'gi'
|
|
815
|
+
},
|
|
816
|
+
{
|
|
817
|
+
type: 'regex',
|
|
818
|
+
pattern: '(?:fetch|axios|request).*\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
|
|
819
|
+
flags: 'gi'
|
|
820
|
+
},
|
|
821
|
+
{
|
|
822
|
+
type: 'regex',
|
|
823
|
+
pattern: '\\.(?:onion|bit|i2p)[\\/\\s\\\'\\"]',
|
|
824
|
+
flags: 'gi'
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
type: 'regex',
|
|
828
|
+
pattern: 'ngrok\\.io|serveo\\.net|localhost\\.run',
|
|
829
|
+
flags: 'gi'
|
|
830
|
+
}
|
|
831
|
+
],
|
|
832
|
+
remediation: 'Review all external network connections. Verify destinations are legitimate and authorized. Block unauthorized external communications.',
|
|
833
|
+
enabled: true,
|
|
834
|
+
tags: ['network', 'c2', 'suspicious', 'malware']
|
|
835
|
+
}
|
|
836
|
+
];
|
|
837
|
+
|
|
838
|
+
/**
|
|
839
|
+
* Malicious Loader Detection Rules
|
|
840
|
+
*/
|
|
841
|
+
const loaderRules: Rule[] = [
|
|
842
|
+
{
|
|
843
|
+
id: 'MAL-LOAD-001',
|
|
844
|
+
name: 'Dynamic Code Loading',
|
|
845
|
+
description: 'Code dynamically loads and executes external content. This is a common technique for loading malware payloads.',
|
|
846
|
+
languages: ['javascript', 'typescript', 'python', 'php'],
|
|
847
|
+
threatType: ThreatType.MALICIOUS_LOADER,
|
|
848
|
+
category: FindingCategory.MALWARE,
|
|
849
|
+
severity: Severity.HIGH,
|
|
850
|
+
standards: getStandardsForThreat(ThreatType.MALICIOUS_LOADER),
|
|
851
|
+
patterns: [
|
|
852
|
+
{
|
|
853
|
+
type: 'regex',
|
|
854
|
+
pattern: 'eval\\s*\\(\\s*(?:fetch|axios|request|http\\.get)',
|
|
855
|
+
flags: 'gis'
|
|
856
|
+
},
|
|
857
|
+
{
|
|
858
|
+
type: 'regex',
|
|
859
|
+
pattern: 'document\\.write\\s*\\([\'"]<script[^>]*src=',
|
|
860
|
+
flags: 'gi'
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
type: 'regex',
|
|
864
|
+
pattern: 'exec\\s*\\(\\s*(?:urllib|requests)\\.get',
|
|
865
|
+
flags: 'gis'
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
type: 'regex',
|
|
869
|
+
pattern: '\\.createElement\\s*\\([\'"]script[\'"]\\)[\\s\\S]*\\.src\\s*=',
|
|
870
|
+
flags: 'gim'
|
|
871
|
+
}
|
|
872
|
+
],
|
|
873
|
+
remediation: 'Dynamic code loading from external sources is dangerous. Use Content Security Policy. Verify all external code sources and use integrity checks.',
|
|
874
|
+
enabled: true,
|
|
875
|
+
tags: ['loader', 'dynamic', 'remote-code', 'malware']
|
|
876
|
+
}
|
|
877
|
+
];
|
|
878
|
+
|
|
879
|
+
/**
|
|
880
|
+
* Export all malware rules (LEGACY COMPATIBILITY)
|
|
881
|
+
* For backward compatibility with existing codebase
|
|
882
|
+
*/
|
|
883
|
+
export const malwareRules: Rule[] = [
|
|
884
|
+
...backdoorRules,
|
|
885
|
+
...cryptominerRules,
|
|
886
|
+
...keyloggerRules,
|
|
887
|
+
...exfiltrationRules,
|
|
888
|
+
...obfuscationRules,
|
|
889
|
+
...payloadRules,
|
|
890
|
+
...networkRules,
|
|
891
|
+
...loaderRules
|
|
892
|
+
];
|
|
893
|
+
|
|
894
|
+
// ============================================================================
|
|
895
|
+
// DEFAULT EXPORT
|
|
896
|
+
// ============================================================================
|
|
897
|
+
|
|
898
|
+
export default {
|
|
899
|
+
// New Engine API
|
|
900
|
+
MalwareRuleEngine,
|
|
901
|
+
createMalwareEngine,
|
|
902
|
+
createCriticalOnlyEngine,
|
|
903
|
+
createCustomEngine,
|
|
904
|
+
|
|
905
|
+
// New Rules (v2)
|
|
906
|
+
allMalwareRules,
|
|
907
|
+
backdoorRulesV2: newBackdoorRules,
|
|
908
|
+
cryptominerRules,
|
|
909
|
+
keyloggerRules,
|
|
910
|
+
exfiltrationRules,
|
|
911
|
+
obfuscationRules,
|
|
912
|
+
loaderRules,
|
|
913
|
+
networkRules,
|
|
914
|
+
|
|
915
|
+
// Convenience functions
|
|
916
|
+
scanForMalware,
|
|
917
|
+
hasMalwareCategory,
|
|
918
|
+
generateMalwareReport,
|
|
919
|
+
getModuleInfo,
|
|
920
|
+
|
|
921
|
+
// Legacy compatibility
|
|
922
|
+
malwareRules,
|
|
923
|
+
backdoorRules,
|
|
924
|
+
|
|
925
|
+
// Metadata
|
|
926
|
+
MALWARE_MODULE_INFO
|
|
927
|
+
};
|
|
928
|
+
|