@elizaos/skills 2.0.0-alpha.3
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 +126 -0
- package/package.json +53 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
- package/skills/security-burpsuite-project-parser/README.md +103 -0
- package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
- package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
- package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
- package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
- package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
- package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
- package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
- package/skills/security-constant-time-analysis/README.md +381 -0
- package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
- package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
- package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
- package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
- package/skills/security-constant-time-analysis/pyproject.toml +52 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/skills/security-constant-time-analysis/uv.lock +8 -0
- package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
- package/skills/security-culture-index/README.md +79 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
- package/skills/security-dwarf-expert/README.md +38 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
- package/skills/security-firebase-apk-scanner/README.md +85 -0
- package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
- package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
- package/skills/semgrep-rule-variant-creator/README.md +86 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
- package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
- package/skills/yara-authoring/README.md +131 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
# YARA-X String Selection
|
|
2
|
+
|
|
3
|
+
Choosing the right strings is the most critical decision in YARA rule writing.
|
|
4
|
+
|
|
5
|
+
> **YARA-X Note:** YARA-X enforces stricter validation on strings. Base64 modifier requires 3+ character strings, and regex patterns must have properly escaped metacharacters.
|
|
6
|
+
|
|
7
|
+
## String Quality Judgment
|
|
8
|
+
|
|
9
|
+
Before using any string, run through this mental checklist:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Is this string good enough?
|
|
13
|
+
├─ At least 4 bytes? (minimum for useful atoms)
|
|
14
|
+
├─ Contains 4 consecutive unique bytes? (not 0000, 9090, FFFF)
|
|
15
|
+
├─ NOT an API name? (VirtualAlloc, CreateRemoteThread = reject)
|
|
16
|
+
├─ NOT a common path? (C:\Windows\, cmd.exe = reject)
|
|
17
|
+
├─ NOT a format string? (%s, %d, Error: %s = reject)
|
|
18
|
+
├─ Would match in Windows system files? (if yes = reject)
|
|
19
|
+
├─ Specific to this malware family? (if yes = use it)
|
|
20
|
+
└─ Found in other malware too? (combine with unique marker)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## High-Value String Sources
|
|
24
|
+
|
|
25
|
+
**Gold tier** — Almost always unique:
|
|
26
|
+
- Mutex names: `"Global\\MyMalwareMutex"`
|
|
27
|
+
- Stack strings (decoded at runtime)
|
|
28
|
+
- PDB paths: `"C:\\Users\\dev\\malware.pdb"`
|
|
29
|
+
|
|
30
|
+
**Silver tier** — Usually unique:
|
|
31
|
+
- C2 paths: `"/api/beacon/check"`
|
|
32
|
+
- Configuration markers: `"CONFIG_START"`
|
|
33
|
+
- Custom protocol headers: `"BEACON_1.0"`
|
|
34
|
+
|
|
35
|
+
**Bronze tier** — Unique with context:
|
|
36
|
+
- Unique error messages: `"Failed to inject into explorer"`
|
|
37
|
+
- Campaign IDs: `"OPERATION_X"`
|
|
38
|
+
|
|
39
|
+
## String Types
|
|
40
|
+
|
|
41
|
+
### Text Strings
|
|
42
|
+
|
|
43
|
+
```yara
|
|
44
|
+
$text = "Hello World" // Basic ASCII
|
|
45
|
+
$text_wide = "Hello" wide // UTF-16LE (Windows Unicode)
|
|
46
|
+
$text_both = "Hello" ascii wide // Match either encoding
|
|
47
|
+
$text_nocase = "hello" nocase // Case-insensitive (performance cost)
|
|
48
|
+
$text_full = "hello" fullword // Word boundaries only
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Hex Strings
|
|
52
|
+
|
|
53
|
+
```yara
|
|
54
|
+
$hex = { 4D 5A 90 00 } // Exact bytes
|
|
55
|
+
$wild = { 4D 5A ?? ?? } // Single-byte wildcards
|
|
56
|
+
$jump = { 4D 5A [2-4] 50 45 } // Variable-length jump (bounded!)
|
|
57
|
+
$alt = { 4D 5A ( 90 00 | 00 00 ) } // Alternatives
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Regular Expressions
|
|
61
|
+
|
|
62
|
+
```yara
|
|
63
|
+
// ALWAYS bound your regex
|
|
64
|
+
$url = /https?:\/\/[a-z0-9]{5,50}\.onion/ // Good: bounded
|
|
65
|
+
$bad = /https?:\/\/.*/ // BAD: unbounded
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**YARA-X regex requirements:**
|
|
69
|
+
- Literal `{` must be escaped as `\{` (YARA-X strict mode)
|
|
70
|
+
- Invalid escape sequences error instead of becoming literals
|
|
71
|
+
- Use `yr check` to validate regex patterns before deployment
|
|
72
|
+
|
|
73
|
+
```yara
|
|
74
|
+
// BAD: Fails in YARA-X
|
|
75
|
+
$pattern = /config{key}/
|
|
76
|
+
|
|
77
|
+
// GOOD: Escape the brace
|
|
78
|
+
$pattern = /config\{key\}/
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Modifiers and Their Costs
|
|
82
|
+
|
|
83
|
+
| Modifier | Performance Impact | When to Use |
|
|
84
|
+
|----------|-------------------|-------------|
|
|
85
|
+
| `ascii` | None | Default, always included |
|
|
86
|
+
| `wide` | Minimal | Windows Unicode strings |
|
|
87
|
+
| `nocase` | **Doubles atoms** | Only when necessary |
|
|
88
|
+
| `fullword` | Minimal | Prevent substring matches |
|
|
89
|
+
| `xor` | **High (255x patterns)** | Only with specific range |
|
|
90
|
+
| `base64` | Moderate (3x patterns) | Encoded payloads (**3+ chars required in YARA-X**) |
|
|
91
|
+
| `private` | None | Hide pattern from scan output (YARA-X 1.3.0+) |
|
|
92
|
+
|
|
93
|
+
**Modifier judgment:**
|
|
94
|
+
- `nocase` — Only use for user-facing strings that might vary in case
|
|
95
|
+
- `xor(0x00-0xFF)` — Almost always too broad; find the actual key
|
|
96
|
+
- `xor(0x41)` — Specific key is acceptable
|
|
97
|
+
- `base64` — YARA-X requires strings of 3+ characters (won't match on shorter strings)
|
|
98
|
+
|
|
99
|
+
### Private Patterns (YARA-X 1.3.0+)
|
|
100
|
+
|
|
101
|
+
Mark helper patterns as private to exclude them from scan output:
|
|
102
|
+
|
|
103
|
+
```yara
|
|
104
|
+
strings:
|
|
105
|
+
$public = "malware_marker"
|
|
106
|
+
private $helper = "internal_pattern" // Matches but not in output
|
|
107
|
+
|
|
108
|
+
condition:
|
|
109
|
+
$public and $helper
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Bad String Sources (Always Reject)
|
|
113
|
+
|
|
114
|
+
### API Names
|
|
115
|
+
|
|
116
|
+
Every Windows program uses these:
|
|
117
|
+
|
|
118
|
+
```yara
|
|
119
|
+
// REJECT: Found in all executables
|
|
120
|
+
$bad = "VirtualAlloc"
|
|
121
|
+
$bad = "CreateRemoteThread"
|
|
122
|
+
$bad = "WriteProcessMemory"
|
|
123
|
+
$bad = "NtCreateThreadEx"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Expert response:** Use hex pattern of the call site, not the import name.
|
|
127
|
+
|
|
128
|
+
### Common Paths
|
|
129
|
+
|
|
130
|
+
```yara
|
|
131
|
+
// REJECT: Found everywhere
|
|
132
|
+
$bad = "C:\\Windows\\System32"
|
|
133
|
+
$bad = "cmd.exe"
|
|
134
|
+
$bad = "powershell.exe"
|
|
135
|
+
$bad = "\\AppData\\Local"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Expert response:** Find malware-specific full paths.
|
|
139
|
+
|
|
140
|
+
### Format Strings
|
|
141
|
+
|
|
142
|
+
```yara
|
|
143
|
+
// REJECT: Every C program
|
|
144
|
+
$bad = "%s"
|
|
145
|
+
$bad = "%d"
|
|
146
|
+
$bad = "Error: %s"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Expert response:** Find unique format strings: `"Beacon initialized: %s:%d with key %08X"`
|
|
150
|
+
|
|
151
|
+
### Common Libraries
|
|
152
|
+
|
|
153
|
+
```yara
|
|
154
|
+
// REJECT: Every Windows program
|
|
155
|
+
$bad = "KERNEL32.dll"
|
|
156
|
+
$bad = "ntdll.dll"
|
|
157
|
+
$bad = "USER32.dll"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### JavaScript Framework Patterns
|
|
161
|
+
|
|
162
|
+
```yara
|
|
163
|
+
// REJECT: Every Node.js application
|
|
164
|
+
$bad = "require("
|
|
165
|
+
$bad = "fs.readFile"
|
|
166
|
+
$bad = "child_process"
|
|
167
|
+
$bad = "process.env"
|
|
168
|
+
$bad = "fetch("
|
|
169
|
+
$bad = "axios"
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**Expert response:** Combine with suspicious context:
|
|
173
|
+
|
|
174
|
+
```yara
|
|
175
|
+
// child_process alone = every CLI tool
|
|
176
|
+
// child_process + base64 decode + network fetch = suspicious
|
|
177
|
+
strings:
|
|
178
|
+
$exec = /child_process['"]\s*\)\.exec/
|
|
179
|
+
$decode = /atob\s*\(|Buffer\.from\s*\([^)]+,\s*['"]base64/
|
|
180
|
+
$exfil = /discord\.com\/api|telegram\.org\/bot/
|
|
181
|
+
|
|
182
|
+
condition:
|
|
183
|
+
$exec and $decode and $exfil
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Stack Strings Pattern
|
|
187
|
+
|
|
188
|
+
Malware often builds strings on the stack to evade static analysis. These are almost always unique:
|
|
189
|
+
|
|
190
|
+
```yara
|
|
191
|
+
// Looking for stack-built "cmd.exe"
|
|
192
|
+
$stack_cmd = {
|
|
193
|
+
C6 45 ?? 63 // mov byte ptr [ebp+?], 'c'
|
|
194
|
+
C6 45 ?? 6D // mov byte ptr [ebp+?], 'm'
|
|
195
|
+
C6 45 ?? 64 // mov byte ptr [ebp+?], 'd'
|
|
196
|
+
C6 45 ?? 2E // mov byte ptr [ebp+?], '.'
|
|
197
|
+
C6 45 ?? 65 // mov byte ptr [ebp+?], 'e'
|
|
198
|
+
C6 45 ?? 78 // mov byte ptr [ebp+?], 'x'
|
|
199
|
+
C6 45 ?? 65 // mov byte ptr [ebp+?], 'e'
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Expert heuristic:** If yarGen returns only API names, look for stack strings — the sample likely decodes sensitive strings at runtime.
|
|
204
|
+
|
|
205
|
+
## Hex String Best Practices
|
|
206
|
+
|
|
207
|
+
### Wildcards
|
|
208
|
+
|
|
209
|
+
```yara
|
|
210
|
+
// Single byte wildcard
|
|
211
|
+
{ 4D 5A ?? 00 }
|
|
212
|
+
|
|
213
|
+
// Nibble wildcard (half byte)
|
|
214
|
+
{ 4D 5? } // Matches 4D 50 through 4D 5F
|
|
215
|
+
|
|
216
|
+
// BOUNDED jumps only
|
|
217
|
+
{ 4D 5A [2-4] 50 45 } // 2-4 bytes between MZ and PE
|
|
218
|
+
|
|
219
|
+
// NEVER unbounded
|
|
220
|
+
{ 4D 5A [-] 50 45 } // REJECT: unlimited = slow
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Leading Bytes Matter
|
|
224
|
+
|
|
225
|
+
```yara
|
|
226
|
+
// BAD: No stable atom at start
|
|
227
|
+
{ ?? ?? 4D 5A 90 00 }
|
|
228
|
+
|
|
229
|
+
// GOOD: Stable bytes first
|
|
230
|
+
{ 4D 5A 90 00 ?? ?? }
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
The first 4 bytes determine atom quality. Put your unique bytes there.
|
|
234
|
+
|
|
235
|
+
## Combining Strings Effectively
|
|
236
|
+
|
|
237
|
+
### Group by Purpose
|
|
238
|
+
|
|
239
|
+
```yara
|
|
240
|
+
strings:
|
|
241
|
+
// Core identification (all required)
|
|
242
|
+
$mutex = "Global\\MyMutex"
|
|
243
|
+
$config = { 43 4F 4E 46 49 47 }
|
|
244
|
+
|
|
245
|
+
// C2 indicators (any one)
|
|
246
|
+
$c2_1 = "/api/beacon"
|
|
247
|
+
$c2_2 = "/check_in"
|
|
248
|
+
|
|
249
|
+
condition:
|
|
250
|
+
all of ($mutex, $config) and
|
|
251
|
+
any of ($c2_*)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### False Positive Exclusions
|
|
255
|
+
|
|
256
|
+
```yara
|
|
257
|
+
strings:
|
|
258
|
+
$malware = "SuspiciousString"
|
|
259
|
+
$fp_legitimate = "Legitimate Vendor Inc"
|
|
260
|
+
|
|
261
|
+
condition:
|
|
262
|
+
$malware and not $fp_legitimate
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Using yarGen Effectively
|
|
266
|
+
|
|
267
|
+
yarGen extracts candidate strings, but you must validate:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
python yarGen.py -m /path/to/samples --excludegood
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Expert heuristic:** yarGen output needs 80% filtering. Most suggestions are:
|
|
274
|
+
- API names (reject)
|
|
275
|
+
- Common library strings (reject)
|
|
276
|
+
- Format strings (reject)
|
|
277
|
+
- Paths to common Windows directories (reject)
|
|
278
|
+
|
|
279
|
+
Keep only the unique mutex names, C2 paths, and configuration markers.
|
|
280
|
+
|
|
281
|
+
## JavaScript-Specific Patterns
|
|
282
|
+
|
|
283
|
+
For JavaScript/TypeScript malware (npm packages, VS Code extensions, browser extensions):
|
|
284
|
+
|
|
285
|
+
### Obfuscator Signatures
|
|
286
|
+
|
|
287
|
+
```yara
|
|
288
|
+
// javascript-obfuscator tool signature (hex variable names)
|
|
289
|
+
$hex_var = /_0x[a-fA-F0-9]{4,}/
|
|
290
|
+
|
|
291
|
+
// String.fromCharCode chains (hiding strings)
|
|
292
|
+
$fromcharcode = /String\.fromCharCode\s*\(\s*\d+(\s*,\s*\d+){5,}\)/
|
|
293
|
+
|
|
294
|
+
// Bracket notation chains (property access obfuscation)
|
|
295
|
+
$bracket_chain = /\[['"][a-zA-Z]+['"]\]\s*\[['"][a-zA-Z]+['"]\]\s*\[['"][a-zA-Z]+['"]\]/
|
|
296
|
+
|
|
297
|
+
// atob/btoa with concatenation (base64 evasion)
|
|
298
|
+
$atob_concat = /atob\s*\(\s*['"][^'"]+['"]\s*\+/
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Expert Patterns from Production Rules
|
|
302
|
+
|
|
303
|
+
These patterns come from Neo23x0 signature-base and Burp-Yara-Rules — battle-tested in production.
|
|
304
|
+
|
|
305
|
+
**javascript-obfuscator tool signature (Neo23x0):**
|
|
306
|
+
|
|
307
|
+
```yara
|
|
308
|
+
// Initialization pattern at file start
|
|
309
|
+
$init = "var a0_0x" at 0
|
|
310
|
+
|
|
311
|
+
// Infinite loop (self-defending code)
|
|
312
|
+
$loop = "while(!![])"
|
|
313
|
+
|
|
314
|
+
// Global scope access hack
|
|
315
|
+
$scope_hack = "{}.constructor(\"return this\")"
|
|
316
|
+
|
|
317
|
+
condition:
|
|
318
|
+
$init at 0 or
|
|
319
|
+
(filesize < 1MB and 3 of ($loop, $scope_hack, ...))
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Expert insight:** The `filesize < 1MB` constraint plus threshold (`3 of`) significantly reduces FPs.
|
|
323
|
+
|
|
324
|
+
**eval + decode combo (most common obfuscation):**
|
|
325
|
+
|
|
326
|
+
```yara
|
|
327
|
+
// nocase handles case variations in minified/obfuscated code
|
|
328
|
+
$eval_decode = /eval\s*\(\s*(unescape|atob)\s*\(/ nocase
|
|
329
|
+
$func_decode = /Function\s*\(\s*atob\s*\(/ nocase
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Hex-encoded string array:**
|
|
333
|
+
|
|
334
|
+
```yara
|
|
335
|
+
// Matches: var _0x1234 = ["\x48\x65\x6c\x6c\x6f", ...]
|
|
336
|
+
$hex_array = /var\s+\w+\s*=\s*\[\s*["']\\x[0-9a-fA-F]+/
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Invisible Unicode (Stealth)
|
|
340
|
+
|
|
341
|
+
Two Unicode ranges are commonly abused: standard Variation Selectors (U+FE00-FE0F) and Variation Selectors Supplement (U+E0100-E01EF). Detect both.
|
|
342
|
+
|
|
343
|
+
**Standard Variation Selectors (VS1-16):**
|
|
344
|
+
|
|
345
|
+
```yara
|
|
346
|
+
// UTF-8 variation selectors U+FE00-FE0F (invisible characters hiding code)
|
|
347
|
+
$vs_utf8 = { EF B8 (80|81|82|83|84|85|86|87|88|89|8A|8B|8C|8D|8E|8F) }
|
|
348
|
+
|
|
349
|
+
// Zero-width characters
|
|
350
|
+
$zwc = { E2 80 (8B|8C|8D|8E|8F|AA|AB|AC|AD|AE|AF) }
|
|
351
|
+
|
|
352
|
+
condition:
|
|
353
|
+
#vs_utf8 > 5 and any of ($eval, $function) // 5+ is suspicious per Veracode research
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
**Expert heuristic:** Legitimate i18n uses few variation selectors. 10+ in a JS file is suspicious.
|
|
357
|
+
|
|
358
|
+
### Unicode Steganography (Variation Selectors Supplement)
|
|
359
|
+
|
|
360
|
+
**Variation Selectors Supplement (U+E0100-E01EF):**
|
|
361
|
+
|
|
362
|
+
The `os-info-checker-es6` attack (2025) used this range — invisible nonspacing marks appended to visible characters with data encoded in the low byte.
|
|
363
|
+
|
|
364
|
+
**Byte pattern for detection:**
|
|
365
|
+
|
|
366
|
+
```yara
|
|
367
|
+
rule SUSP_JS_Unicode_Steganography
|
|
368
|
+
{
|
|
369
|
+
strings:
|
|
370
|
+
// UTF-8 encoding of Variation Selectors Supplement
|
|
371
|
+
// U+E0100-E01EF encodes as: F3 A0 84 80 to F3 A0 87 AF
|
|
372
|
+
$var_selectors = { F3 A0 (84|85|86|87) }
|
|
373
|
+
$eval_decode = /eval\s*\(\s*atob\s*\(/
|
|
374
|
+
|
|
375
|
+
condition:
|
|
376
|
+
// 5+ variation selectors + eval/atob = highly suspicious
|
|
377
|
+
// Legitimate i18n rarely uses these; 5+ is almost never accidental
|
|
378
|
+
#var_selectors > 5 and $eval_decode
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**Why this works:** Variation Selectors Supplement exists for specialized typography (CJK ideograph variants). JavaScript source code has no legitimate use for them. Any significant count combined with eval is malicious.
|
|
383
|
+
|
|
384
|
+
### Modern Exfiltration Channels
|
|
385
|
+
|
|
386
|
+
**Good indicators (specific, suspicious):**
|
|
387
|
+
|
|
388
|
+
```yara
|
|
389
|
+
$discord_webhook = /discord\.com\/api\/webhooks\/\d+\//
|
|
390
|
+
$telegram_bot = /api\.telegram\.org\/bot[0-9]+:[A-Za-z0-9_-]+/
|
|
391
|
+
$pastebin_raw = /pastebin\.com\/raw\//
|
|
392
|
+
$free_hosting = /(vercel\.app|netlify\.app|railway\.app|render\.com)\/api/
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
**Bad indicators (too common alone):**
|
|
396
|
+
|
|
397
|
+
```yara
|
|
398
|
+
// REJECT without additional context
|
|
399
|
+
$bad = "fetch(" // Every web app
|
|
400
|
+
$bad = "axios.post" // Every API client
|
|
401
|
+
$bad = /https?:\/\// // Every URL
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Combine for specificity:**
|
|
405
|
+
|
|
406
|
+
```yara
|
|
407
|
+
strings:
|
|
408
|
+
$cred_path = /\.(npmrc|env|ssh\/id_rsa|aws\/credentials)/
|
|
409
|
+
$read_file = /fs\.readFile|readFileSync/
|
|
410
|
+
$discord = /discord\.com\/api\/webhooks/
|
|
411
|
+
|
|
412
|
+
condition:
|
|
413
|
+
$cred_path and $read_file and $discord
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Credential Theft Patterns
|
|
417
|
+
|
|
418
|
+
```yara
|
|
419
|
+
// Browser credential databases
|
|
420
|
+
$chrome_login = "Login Data"
|
|
421
|
+
$firefox_logins = "logins.json"
|
|
422
|
+
|
|
423
|
+
// Config file paths
|
|
424
|
+
$npmrc = ".npmrc"
|
|
425
|
+
$ssh_key = /\.ssh\/(id_rsa|id_ed25519)/
|
|
426
|
+
$aws_creds = ".aws/credentials"
|
|
427
|
+
$env_file = /\.env(\.local)?/
|
|
428
|
+
|
|
429
|
+
// Combined with file read = suspicious
|
|
430
|
+
condition:
|
|
431
|
+
any of ($chrome_*, $firefox_*, $npmrc, $ssh_*, $aws_*, $env_*) and
|
|
432
|
+
any of ($read_file_*)
|
|
433
|
+
```
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# YARA Naming and Metadata
|
|
2
|
+
|
|
3
|
+
Consistent naming for maintainable rule sets.
|
|
4
|
+
|
|
5
|
+
## Naming Convention
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
{CATEGORY}_{PLATFORM}_{FAMILY}_{VARIANT}_{DATE}
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Component | Description | Examples |
|
|
12
|
+
|-----------|-------------|----------|
|
|
13
|
+
| CATEGORY | Threat classification | MAL, HKTL, WEBSHELL, EXPL, SUSP |
|
|
14
|
+
| PLATFORM | Target OS/environment | Win, Lnx, Mac, Android, Multi |
|
|
15
|
+
| FAMILY | Malware family name | Emotet, CobaltStrike, LockBit |
|
|
16
|
+
| VARIANT | Specific variant/component | Loader, Beacon, Config |
|
|
17
|
+
| DATE | Creation date (MonthYear format) | Jan25, May23 |
|
|
18
|
+
|
|
19
|
+
### Category Prefixes
|
|
20
|
+
|
|
21
|
+
| Prefix | Meaning | Use When |
|
|
22
|
+
|--------|---------|----------|
|
|
23
|
+
| `MAL_` | Confirmed malware | Verified malicious code |
|
|
24
|
+
| `HKTL_` | Hacking tool | Dual-use tools (Mimikatz, Cobalt Strike) |
|
|
25
|
+
| `WEBSHELL_` | Web shell | PHP/ASP/JSP backdoors |
|
|
26
|
+
| `EXPL_` | Exploit | Exploit code or shellcode |
|
|
27
|
+
| `VULN_` | Vulnerable | Vulnerable software patterns |
|
|
28
|
+
| `SUSP_` | Suspicious | Lower confidence, may FP |
|
|
29
|
+
| `PUA_` | Potentially unwanted | Adware, bundleware |
|
|
30
|
+
| `GEN_` | Generic | Broad detection category |
|
|
31
|
+
|
|
32
|
+
### Additional Classifiers
|
|
33
|
+
|
|
34
|
+
Append when relevant:
|
|
35
|
+
|
|
36
|
+
| Classifier | Meaning |
|
|
37
|
+
|------------|---------|
|
|
38
|
+
| `APT_` | APT-associated |
|
|
39
|
+
| `CRIME_` | Cybercrime operation |
|
|
40
|
+
| `RANSOM_` | Ransomware |
|
|
41
|
+
| `RAT_` | Remote access trojan |
|
|
42
|
+
| `MINER_` | Cryptominer |
|
|
43
|
+
| `STEALER_` | Information stealer |
|
|
44
|
+
| `LOADER_` | Loader/dropper |
|
|
45
|
+
| `C2_` | Command and control |
|
|
46
|
+
|
|
47
|
+
### Platform Indicators
|
|
48
|
+
|
|
49
|
+
| Indicator | Platform |
|
|
50
|
+
|-----------|----------|
|
|
51
|
+
| `Win_` | Windows |
|
|
52
|
+
| `Lnx_` | Linux |
|
|
53
|
+
| `Mac_` | macOS |
|
|
54
|
+
| `Android_` | Android |
|
|
55
|
+
| `iOS_` | iOS |
|
|
56
|
+
| `Multi_` | Cross-platform |
|
|
57
|
+
| `PE_` | PE file format |
|
|
58
|
+
| `ELF_` | ELF file format |
|
|
59
|
+
| `PS_` | PowerShell |
|
|
60
|
+
| `DOC_` | Office documents |
|
|
61
|
+
| `PDF_` | PDF files |
|
|
62
|
+
| `JAR_` | Java archives |
|
|
63
|
+
|
|
64
|
+
### Examples
|
|
65
|
+
|
|
66
|
+
```yara
|
|
67
|
+
// Good names (all include date suffix)
|
|
68
|
+
MAL_Win_Emotet_Loader_Jan25
|
|
69
|
+
HKTL_Win_CobaltStrike_Beacon_Jan25
|
|
70
|
+
WEBSHELL_PHP_Generic_Eval_Jan25
|
|
71
|
+
APT_Win_Lazarus_AppleJeus_Config_Jan25
|
|
72
|
+
RANSOM_Win_LockBit3_Decryptor_Jan25
|
|
73
|
+
SUSP_PE_Packed_UPX_Anomaly_Jan25
|
|
74
|
+
|
|
75
|
+
// Bad names
|
|
76
|
+
malware_detector // Too vague
|
|
77
|
+
rule1 // Meaningless
|
|
78
|
+
detect_bad_stuff // Unprofessional
|
|
79
|
+
EMOTET_RULE // Missing category/platform/date
|
|
80
|
+
CobaltStrike_Beacon // Missing category/date
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Metadata Requirements
|
|
84
|
+
|
|
85
|
+
### Required Fields
|
|
86
|
+
|
|
87
|
+
Every rule MUST have:
|
|
88
|
+
|
|
89
|
+
```yara
|
|
90
|
+
meta:
|
|
91
|
+
description = "Detects X malware via Y unique feature"
|
|
92
|
+
author = "Your Name <email@example.com>" // OR "@twitter_handle"
|
|
93
|
+
reference = "https://analysis-report-url.com"
|
|
94
|
+
date = "2025-01-29"
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Description Guidelines
|
|
98
|
+
|
|
99
|
+
- **Start with "Detects"** — Consistent, scannable format
|
|
100
|
+
- **Length: 60-400 characters** — Brief but informative
|
|
101
|
+
- **Explain WHAT and HOW** — What it catches and the distinguishing feature
|
|
102
|
+
|
|
103
|
+
```yara
|
|
104
|
+
// Good descriptions
|
|
105
|
+
description = "Detects Emotet loader via unique XOR decryption routine and mutex pattern"
|
|
106
|
+
description = "Detects CobaltStrike beacon by watermark bytes in PE overlay"
|
|
107
|
+
description = "Detects generic PHP webshell using eval with base64_decode pattern"
|
|
108
|
+
|
|
109
|
+
// Bad descriptions
|
|
110
|
+
description = "Malware" // Too short
|
|
111
|
+
description = "This rule detects..." // Redundant
|
|
112
|
+
description = "Catches bad stuff" // Unprofessional
|
|
113
|
+
description = "Might be malware" // Low confidence = use SUSP_ prefix
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Optional Fields
|
|
117
|
+
|
|
118
|
+
```yara
|
|
119
|
+
meta:
|
|
120
|
+
// Sample identification (hash field can repeat)
|
|
121
|
+
hash = "abc123def456..." // SHA256 of reference sample
|
|
122
|
+
hash = "789xyz..." // Additional samples (repeat field)
|
|
123
|
+
|
|
124
|
+
// Confidence scoring
|
|
125
|
+
score = 75 // 0-100, use thresholds
|
|
126
|
+
|
|
127
|
+
// Versioning
|
|
128
|
+
modified = "2025-01-30" // Last update date
|
|
129
|
+
version = "1.2" // Rule version
|
|
130
|
+
old_rule_name = "Previous_Rule_Name" // For renamed rules (searchability)
|
|
131
|
+
|
|
132
|
+
// Classification
|
|
133
|
+
tags = "apt, lazarus, loader" // Comma-separated
|
|
134
|
+
tlp = "WHITE" // Traffic Light Protocol
|
|
135
|
+
|
|
136
|
+
// MITRE ATT&CK
|
|
137
|
+
mitre_attack = "T1055" // Technique ID
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Score Thresholds
|
|
141
|
+
|
|
142
|
+
| Score | Meaning | Action |
|
|
143
|
+
|-------|---------|--------|
|
|
144
|
+
| 0-25 | Low confidence | Hunting only, expect FPs |
|
|
145
|
+
| 26-50 | Medium | Investigate, don't auto-quarantine |
|
|
146
|
+
| 51-75 | High | Alert SOC, likely malicious |
|
|
147
|
+
| 76-100 | Critical | Auto-quarantine appropriate |
|
|
148
|
+
|
|
149
|
+
## Common Naming Mistakes
|
|
150
|
+
|
|
151
|
+
| Bad Name | Problem | Corrected |
|
|
152
|
+
|----------|---------|-----------|
|
|
153
|
+
| `Emotet_Detector` | Missing category, platform, date | `MAL_Win_Emotet_Loader_Jan25` |
|
|
154
|
+
| `MAL_Suspicious_File` | "Suspicious" is vague | `MAL_Win_Lazarus_Downloader_Jan25` |
|
|
155
|
+
| `rule1` | No semantic meaning | `HKTL_Multi_Mimikatz_CredDump_Jan25` |
|
|
156
|
+
| `MALWARE_windows_trojan` | Wrong case, wrong order | `MAL_Win_Trojan_Generic_Jan25` |
|
|
157
|
+
| `emotet_loader` | All lowercase | `MAL_Win_Emotet_Loader_Jan25` |
|
|
158
|
+
| `EmoteTLoader` | CamelCase | `MAL_Win_Emotet_Loader_Jan25` |
|
|
159
|
+
| `MAL Win Emotet` | Spaces | `MAL_Win_Emotet_Loader_Jan25` |
|
|
160
|
+
| `CobaltStrike_Beacon` | Missing category and date | `HKTL_Win_CobaltStrike_Beacon_Jan25` |
|
|
161
|
+
|
|
162
|
+
## Linter Error Codes
|
|
163
|
+
|
|
164
|
+
The `yara_lint.py` script produces these codes:
|
|
165
|
+
|
|
166
|
+
| Code | Severity | Issue | Fix |
|
|
167
|
+
|------|----------|-------|-----|
|
|
168
|
+
| E001 | Error | Missing required metadata | Add description, author, date, reference |
|
|
169
|
+
| E002 | Error | Invalid rule name format | Use CATEGORY_PLATFORM_FAMILY_DATE |
|
|
170
|
+
| E003 | Error | String under 4 bytes | Use longer strings or hex patterns |
|
|
171
|
+
| W001 | Warning | Name doesn't follow convention | Use standard prefix or justify custom |
|
|
172
|
+
| W002 | Warning | Description doesn't start with "Detects" | Rewrite description |
|
|
173
|
+
| W003 | Warning | Unbounded regex pattern | Add length bounds: `.{0,100}` not `.*` |
|
|
174
|
+
| W004 | Warning | Condition doesn't start with cheap check | Add `filesize <` or magic bytes first |
|
|
175
|
+
| I001 | Info | Unrecognized category prefix | Use standard prefix or document custom |
|
|
176
|
+
| I002 | Info | `nocase` modifier used | Consider if case variation is needed |
|
|
177
|
+
|
|
178
|
+
## PR Review Checklist
|
|
179
|
+
|
|
180
|
+
When reviewing YARA rules in PRs:
|
|
181
|
+
|
|
182
|
+
### Naming & Metadata
|
|
183
|
+
- [ ] Name matches `{CATEGORY}_{PLATFORM}_{FAMILY}_{DATE}` format
|
|
184
|
+
- [ ] Category prefix is from approved list (or justified)
|
|
185
|
+
- [ ] Description starts with "Detects" and is 60-400 chars
|
|
186
|
+
- [ ] Author includes contact (email or @handle)
|
|
187
|
+
- [ ] Reference URL is provided and accessible
|
|
188
|
+
- [ ] Date matches rule creation/modification date
|
|
189
|
+
- [ ] Hash field contains valid SHA256 of primary sample
|
|
190
|
+
|
|
191
|
+
### String Quality
|
|
192
|
+
- [ ] All strings ≥4 bytes
|
|
193
|
+
- [ ] No API names used as indicators
|
|
194
|
+
- [ ] No common paths or executables
|
|
195
|
+
- [ ] Regex patterns are bounded
|
|
196
|
+
- [ ] Base64 modifier only on 3+ char strings
|
|
197
|
+
|
|
198
|
+
### Condition Quality
|
|
199
|
+
- [ ] Starts with `filesize <` check
|
|
200
|
+
- [ ] Has magic bytes check before module use
|
|
201
|
+
- [ ] Uses `and` instead of implicit conjunction
|
|
202
|
+
- [ ] Expensive operations come last
|
|
203
|
+
|
|
204
|
+
### Testing Evidence
|
|
205
|
+
- [ ] Matches all target samples (list sample hashes)
|
|
206
|
+
- [ ] Zero matches on goodware corpus (state corpus tested)
|
|
207
|
+
- [ ] `yr check` passes
|
|
208
|
+
- [ ] `yr fmt --check` passes
|
|
209
|
+
- [ ] Linter passes
|
|
210
|
+
|
|
211
|
+
## Enforcing Style in CI
|
|
212
|
+
|
|
213
|
+
### Pre-commit Hook
|
|
214
|
+
|
|
215
|
+
Add to `.pre-commit-config.yaml`:
|
|
216
|
+
|
|
217
|
+
```yaml
|
|
218
|
+
repos:
|
|
219
|
+
- repo: local
|
|
220
|
+
hooks:
|
|
221
|
+
- id: yara-lint
|
|
222
|
+
name: YARA Lint
|
|
223
|
+
entry: uv run yara_lint.py --strict
|
|
224
|
+
language: system
|
|
225
|
+
files: \.yar$
|
|
226
|
+
types: [file]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### GitHub Actions
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
- name: Lint YARA rules
|
|
233
|
+
run: |
|
|
234
|
+
uv run yara_lint.py --strict rules/
|
|
235
|
+
yr check rules/
|
|
236
|
+
yr fmt --check rules/
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Block PRs that fail linting. No exceptions for "quick fixes."
|
|
240
|
+
|
|
241
|
+
## Anti-Patterns
|
|
242
|
+
|
|
243
|
+
### Naming
|
|
244
|
+
|
|
245
|
+
- All lowercase: `emotet_loader`
|
|
246
|
+
- CamelCase: `EmoteTLoader`
|
|
247
|
+
- No category: `Emotet_Jan25`
|
|
248
|
+
- Spaces or special chars: `MAL Win Emotet`
|
|
249
|
+
- Reserved words: `rule`, `strings`, `condition`
|
|
250
|
+
|
|
251
|
+
### Metadata
|
|
252
|
+
|
|
253
|
+
- Missing description
|
|
254
|
+
- Description doesn't start with "Detects"
|
|
255
|
+
- No author attribution
|
|
256
|
+
- No reference URL
|
|
257
|
+
- Outdated date (not updated when rule modified)
|