mirror of
https://github.com/usestrix/strix.git
synced 2026-10-10 03:28:11 +00:00
fix(skills): use call_mcp dispatch interface, calibrate entropy thresholds, and align docs
This commit is contained in:
parent
9c64d27111
commit
b851572dac
2 changed files with 94 additions and 56 deletions
|
|
@ -22,7 +22,7 @@ Create the directory if it does not exist, then write the file:
|
|||
mkdir -p ~/.strix
|
||||
```
|
||||
|
||||
Paste the servers you want into `~/.strix/mcp-servers.json`. The example below shows one of each transport: a local filesystem server over `stdio` and a remote GitHub server over `http` with a bearer token:
|
||||
Paste the servers you want into `~/.strix/mcp-servers.json`. The example below shows local `stdio` servers (CyberChef for payload deobfuscation and a local filesystem server) alongside a remote GitHub server over `http` with a bearer token:
|
||||
|
||||
```json
|
||||
[
|
||||
|
|
|
|||
|
|
@ -13,93 +13,131 @@ Official resources:
|
|||
|
||||
CyberChef provides over 500 data transformation and cryptographic operations. Connected via the Model Context Protocol (MCP) server `cyberchef`, it enables Strix agents to autonomously analyze, deobfuscate, unpack, and verify encoded exploit payloads, authorization tokens, and obfuscated attack vectors without manual intervention or guessing.
|
||||
|
||||
## Canonical MCP Tool Names & Signatures
|
||||
## MCP Discovery & Dispatch Workflow
|
||||
|
||||
When the `cyberchef` MCP connection is active, the following tools are available in the agent registry:
|
||||
In Strix, agents interact with external MCP servers through the standard generic-dispatch tools:
|
||||
1. **Discover Connection**: Call `list_mcps()` to verify that the `cyberchef` connection is active.
|
||||
2. **Search Tools**: Call `search_mcp_tools(connection="cyberchef", query="magic")` to locate matching tool names.
|
||||
3. **Inspect Schema**: Call `get_mcp_tool_schema(connection="cyberchef", tool="cyberchef_magic")` to review argument parameters.
|
||||
4. **Dispatch Call**: Call `call_mcp(connection="cyberchef", tool="<tool_name>", arguments={...})` to execute the operation.
|
||||
|
||||
- `cyberchef_magic(input: string)`: Run heuristic detection across known encodings, ciphers, and hash formats. Returns recommended deobfuscation recipes and confidence scores.
|
||||
- `cyberchef_bake(input: string, recipe: [{ op: string, args?: any[] }])`: Execute sequential operation chains (e.g. `[{"op": "From Base64"}, {"op": "URL Decode"}]`).
|
||||
- `cyberchef_from_base64(input: string, urlSafe?: boolean)`: Decode standard or URL-safe Base64 strings.
|
||||
- `cyberchef_to_base64(input: string, urlSafe?: boolean)`: Encode plaintext into Base64 / URL-safe Base64.
|
||||
- `cyberchef_from_hex(input: string, delimiter?: "None"|"Space"|"0x"|"Comma")`: Convert hexadecimal sequences to text.
|
||||
- `cyberchef_url_decode(input: string)`: Decode single or multi-round percent-encoded parameters.
|
||||
- `cyberchef_rot13(input: string, amount?: number)`: Rotate characters by offset (default 13, Caesar cipher support).
|
||||
- `cyberchef_xor(input: string, key: string, keyFormat?: "UTF8"|"Hex")`: Decrypt or apply bitwise XOR with secret key.
|
||||
- `cyberchef_jwt_decode(token: string)`: Parse and inspect header, claims, alg, and signatures of JSON Web Tokens.
|
||||
- `cyberchef_entropy(input: string)`: Calculate Shannon entropy (0.0 to 8.0) to distinguish plaintext, compressed data, and encrypted or packed payloads.
|
||||
- `cyberchef_defang_url(url: string)`: Defang malicious or suspicious indicators (`hxxps://target[.]com`) for safe reporting.
|
||||
- `cyberchef_extract_entities(text: string)`: Extract URLs, IP addresses, and email addresses from raw logs or memory strings.
|
||||
## High-Signal CyberChef Tools
|
||||
|
||||
When connected to `cyberchef`, the following tools are available on the connection:
|
||||
|
||||
- `cyberchef_magic`: Run heuristic detection across known encodings, ciphers, and hash formats. Returns recommended deobfuscation recipes and confidence scores.
|
||||
- `cyberchef_bake`: Execute sequential operation chains (e.g. `[{"op": "From Base64"}, {"op": "URL Decode"}]`).
|
||||
- `cyberchef_from_base64`: Decode standard or URL-safe Base64 strings.
|
||||
- `cyberchef_to_base64`: Encode plaintext into Base64 / URL-safe Base64.
|
||||
- `cyberchef_from_hex`: Convert hexadecimal sequences to text (supports `None`, `Space`, `0x`, `Comma` delimiters).
|
||||
- `cyberchef_url_decode`: Decode single or multi-round percent-encoded parameters.
|
||||
- `cyberchef_rot13`: Rotate characters by offset (default 13, Caesar cipher support).
|
||||
- `cyberchef_xor`: Decrypt or apply bitwise XOR with secret key.
|
||||
- `cyberchef_jwt_decode`: Parse and inspect header, claims, alg, and signatures of JSON Web Tokens.
|
||||
- `cyberchef_entropy`: Calculate Shannon entropy to distinguish plaintext, compressed data, and encrypted or packed payloads.
|
||||
- `cyberchef_defang_url`: Defang malicious or suspicious indicators (`hxxps://target[.]com`) for safe reporting.
|
||||
- `cyberchef_extract_entities`: Extract URLs, IP addresses, and email addresses from raw logs or memory strings.
|
||||
|
||||
## Agent-Safe Baseline for Automation
|
||||
|
||||
1. **Heuristic First**:
|
||||
Always run `cyberchef_magic` on unknown high-entropy or encoded strings before guessing transformations:
|
||||
```json
|
||||
{
|
||||
"tool": "cyberchef_magic",
|
||||
"arguments": { "input": "ZXlKaGJHY2lPaUpTVXpVbkxh..." }
|
||||
}
|
||||
```
|
||||
### 1. Heuristic First (`cyberchef_magic`)
|
||||
Always run `cyberchef_magic` via `call_mcp` on unknown high-entropy or encoded strings before guessing transformations:
|
||||
```json
|
||||
{
|
||||
"tool": "call_mcp",
|
||||
"arguments": {
|
||||
"connection": "cyberchef",
|
||||
"tool": "cyberchef_magic",
|
||||
"arguments": {
|
||||
"input": "ZXlKaGJHY2lPaUpTVXpVbkxh..."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
2. **Sequential Multi-Layer Deobfuscation (Bake)**:
|
||||
For payloads with layered obfuscation (e.g. Hex inside Base64 inside URL-encoded query params):
|
||||
```json
|
||||
{
|
||||
"tool": "cyberchef_bake",
|
||||
"arguments": {
|
||||
"input": "%34%38%36%35%36%63%36%63%36%66",
|
||||
"recipe": [
|
||||
{ "op": "URL Decode" },
|
||||
{ "op": "From Hex", "args": ["None"] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
### 2. Sequential Multi-Layer Deobfuscation (`cyberchef_bake`)
|
||||
For payloads with layered obfuscation (e.g. Hex inside Base64 inside URL-encoded query params):
|
||||
```json
|
||||
{
|
||||
"tool": "call_mcp",
|
||||
"arguments": {
|
||||
"connection": "cyberchef",
|
||||
"tool": "cyberchef_bake",
|
||||
"arguments": {
|
||||
"input": "%34%38%36%35%36%63%36%63%36%66",
|
||||
"recipe": [
|
||||
{ "op": "URL Decode" },
|
||||
{ "op": "From Hex", "args": ["None"] }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
3. **High-Entropy Verification**:
|
||||
Before analyzing suspicious parameters, assess randomness and encryption depth:
|
||||
```json
|
||||
{
|
||||
"tool": "cyberchef_entropy",
|
||||
"arguments": { "input": "01a2fe89cb994821a0d8e4..." }
|
||||
}
|
||||
```
|
||||
- **Entropy < 4.0**: Plain English text, uncompressed source code, or structured JSON/XML.
|
||||
- **Entropy 4.0 - 6.5**: Encoded payloads (Base64, Hex) or compressed data.
|
||||
- **Entropy > 7.0**: Strong encryption, cryptographic hashes, or packed binary shellcode.
|
||||
### 3. Entropy Assessment & Encoding Representation Calibration
|
||||
When evaluating whether a payload or parameter is encrypted, packed shellcode, or benign text, evaluate Shannon entropy through `call_mcp`:
|
||||
```json
|
||||
{
|
||||
"tool": "call_mcp",
|
||||
"arguments": {
|
||||
"connection": "cyberchef",
|
||||
"tool": "cyberchef_entropy",
|
||||
"arguments": {
|
||||
"input": "01a2fe89cb994821a0d8e4..."
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **Calibrate entropy thresholds by input encoding representation:**
|
||||
> Shannon entropy measures bits of information per character. The theoretical maximum is strictly bounded by the alphabet size ($\log_2(N)$):
|
||||
> - **Hex Strings (16 characters, max 4.0 bits/char)**:
|
||||
> - *Plain text / formatted Hex*: ~2.5 – 3.2
|
||||
> - *High-entropy ciphertext / encrypted payload*: **3.8 – 4.0** (Cannot exceed 4.0!)
|
||||
> - *Warning*: Do not misclassify hex ciphertext scoring ~3.9 as low-entropy content.
|
||||
> - **Base64 Strings (64 characters, max 6.0 bits/char)**:
|
||||
> - *Plain text Base64*: ~3.8 – 4.5
|
||||
> - *High-entropy ciphertext / packed data*: **5.7 – 6.0** (Cannot exceed 6.0!)
|
||||
> - **Raw Binary / Decoded Byte Streams (256 values, max 8.0 bits/byte)**:
|
||||
> - *Plain text / uncompressed source code*: < 4.5
|
||||
> - *Compressed archives / packed code / encrypted shellcode*: > 7.2
|
||||
>
|
||||
> **Best Practice**: Decode encoded representations (Hex, Base64) to raw bytes via `cyberchef_from_hex` or `cyberchef_from_base64` before evaluating raw Shannon entropy.
|
||||
|
||||
## Common Security Analysis Patterns
|
||||
|
||||
### Pattern 1: Nested WAF Bypass / Obfuscated Injection Vector
|
||||
When target web applications accept encoded input in parameters or cookies:
|
||||
1. Extract candidate parameter from HTTP request or response.
|
||||
2. Call `cyberchef_magic` to determine layers.
|
||||
3. Call `cyberchef_bake` with the suggested pipeline to recover the plaintext injection string.
|
||||
2. Call `call_mcp(connection="cyberchef", tool="cyberchef_magic", arguments={"input": candidate})` to determine layers.
|
||||
3. Call `call_mcp(connection="cyberchef", tool="cyberchef_bake", arguments={"input": candidate, "recipe": [...]})` with the suggested pipeline to recover the plaintext injection string.
|
||||
4. Verify whether the underlying query contains unsanitized SQLi (`UNION SELECT`), XSS, or SSRF vectors.
|
||||
|
||||
### Pattern 2: JWT Security Inspection
|
||||
When encountering `Authorization: Bearer <token>` or session tokens:
|
||||
1. Call `cyberchef_jwt_decode(token)`.
|
||||
1. Call `call_mcp(connection="cyberchef", tool="cyberchef_jwt_decode", arguments={"token": token})`.
|
||||
2. Inspect the header: check for `alg: "none"`, `alg: "HS256"` with potential asymmetric public key confusion, or empty signatures.
|
||||
3. Inspect claims: verify expiry timestamps (`exp`), issuer (`iss`), role/privilege elevations, and user identities.
|
||||
|
||||
### Pattern 3: XOR Obfuscation Recovery
|
||||
When inspecting hardcoded binary strings, PowerShell scripts, or obfuscated malware droppers:
|
||||
1. Identify probable key length or common plaintext prefix (e.g., `MZ`, `http`, `function`).
|
||||
2. Run `cyberchef_xor` iterating candidate keys to extract underlying C2 endpoints or script payloads.
|
||||
2. Run `call_mcp(connection="cyberchef", tool="cyberchef_xor", arguments={"input": data, "key": candidate_key})` iterating candidate keys to extract underlying C2 endpoints or script payloads.
|
||||
|
||||
## Critical Correctness Rules
|
||||
|
||||
- **Use `call_mcp` Dispatch**: Never attempt to call CyberChef tools directly as top-level agent tools. Always dispatch through `call_mcp(connection="cyberchef", tool="...", arguments={...})`.
|
||||
- **Do Not Guess Encodings**: If a string contains `=, %, 0x` or unexpected symbols, run `cyberchef_magic` first rather than blindly applying base64 or URL decoding.
|
||||
- **Preserve Raw Inputs**: Keep the original obfuscated string in agent memory/notes alongside the decoded output for accurate proof-of-concept (PoC) reporting.
|
||||
- **Fail-Safe Fallback**: If an operation fails during `cyberchef_bake`, isolate the failing recipe step and execute individual tools (`cyberchef_from_base64`, `cyberchef_url_decode`) sequentially.
|
||||
- **Safe Defanging**: Always run `cyberchef_defang_url` on confirmed malicious or C2 URLs before writing final markdown reports.
|
||||
- **Fail-Safe Fallback**: If an operation fails during `cyberchef_bake`, isolate the failing recipe step and execute individual tools (`cyberchef_from_base64`, `cyberchef_url_decode`) sequentially via `call_mcp`.
|
||||
- **Safe Defanging**: Always run `cyberchef_defang_url` via `call_mcp` on confirmed malicious or C2 URLs before writing final markdown reports.
|
||||
|
||||
## Failure Recovery
|
||||
|
||||
- If `cyberchef_from_base64` throws a padding error, retry with `urlSafe: true` or inspect whether characters are URL percent-encoded first.
|
||||
- If `cyberchef_from_hex` produces unprintable garbage characters, check if the input is big-endian or uses custom delimiters (`0x`, `Space`, `,`).
|
||||
- If `cyberchef_bake` returns an error, use `cyberchef_help(query: "<operation>")` to verify supported operation names and argument formats.
|
||||
- If `cyberchef_from_hex` produces unprintable characters, check if the input is big-endian or uses custom delimiters (`0x`, `Space`, `,`).
|
||||
- If `call_mcp` returns an unknown tool error, call `search_mcp_tools(connection="cyberchef", query="...")` to discover the exact tool names registered by the server.
|
||||
|
||||
If uncertain, query web_search with:
|
||||
`site:gchq.github.io/CyberChef cyberchef <operation_name>`
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue